Netty java l'obtention de données de ByteBuf
Comment obtenir un tableau d'octets à partir ByteBuf
efficacement dans le code ci-dessous? J'ai besoin d'obtenir le tableau et puis sérialiser.
package testingNetty;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
public class ServerHandler extends ChannelInboundHandlerAdapter {
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) {
System.out.println("Message receive");
ByteBuf buff = (ByteBuf) msg;
//There is I need get bytes from buff and make serialization
byte[] bytes = BuffConvertor.GetBytes(buff);
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
//Close the connection when an exception is raised.
cause.printStackTrace();
ctx.close();
}
}
Pouvez-vous s'il vous plaît poster le code complet. Aussi de mentionner la version de netty vous utilisez?
J'ai utiliser la version 4.0.9 de Netty
Alors, quel est le problème? Qu'entendez-vous par octets massive dans le contexte ci-dessus?
Octets massive signifie un byte[] qui contient seriziable objet
J'ai utiliser la version 4.0.9 de Netty
Alors, quel est le problème? Qu'entendez-vous par octets massive dans le contexte ci-dessus?
Octets massive signifie un byte[] qui contient seriziable objet
OriginalL'auteur NiceTheo | 2013-10-10
Vous devez vous connecter pour publier un commentaire.
Si vous ne voulez pas le readerIndex à changer:
Si vous souhaitez réduire la copie de la mémoire, vous pouvez utiliser le support de tableau de la
ByteBuf
, si elle est disponible:Veuillez noter que vous ne pouvez pas simplement utiliser
buf.array()
, parce que:ByteBuf
s avoir le soutien de tableau. Certains sont hors du tas de tampons (c'est à dire direct à la mémoire)ByteBuf
a un support de tableau (c'est à direbuf.hasArray()
retournetrue
), la suite n'est pas forcément vrai parce que le tampon peut être une tranche de autres tampon ou un pool de mémoire tampon:buf.array()[0] == buf.getByte(0)
buf.array().length == buf.capacity()
byte[] ar= buf.array()
(si j'ai bien compris le post correctement).Mise à jour de la réponse pour lui.
OriginalL'auteur trustin