2017-07-04 4 views
-1

J'ai fait un camel netty4 serveur programme.et le client a envoyé le message 1119 octets mais mon décodeur tronqué par 1024/95camel netty4 message 1024 tronqué..comment puis-je le résoudre?

voici mon code.

@ChannelHandler.Sharable 
    public static class BytesDecoder extends MessageToMessageDecoder<ByteBuf> { 

     @Override 
     protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List<Object> out) throws Exception { 
        System.out.println("BytesDecoder readableBytes:"+msg.readableBytes()); 
      if (msg.isReadable()) { 
       byte[] bytes = new byte[msg.readableBytes()]; 
       int readerIndex = msg.readerIndex(); 
       msg.getBytes(readerIndex, bytes); 
       out.add(bytes); 
      } 
     } 

    } 

résultat ===>

BytesDecoder readableBytes: 1024

BytesDecoder readableBytes: 95

Je veux obtenir un octet de message complet 1119 octets.

+0

Vérifiez la documentation netty sur ces codecs, ils ont très probablement une limite par défaut de 1024, que vous avez besoin de reconfigurer à une valeur plus élevée, etc –

Répondre

0

En fait, j'ai déjà répondu à cette question sur la liste de diffusion netty.

Il n'est pas garanti que vous receviez toutes les données en un appel en lecture. Ainsi, vous devrez en tenir compte en étendant ByteToMessageDecoder et ne lire les octets qu'une fois qu'il y en a au moins 1024 lisibles.

Pour plus d'exemples et de détails s'il vous plaît voir le javadocs de ByteToMessageDecoder.

+0

Merci.et pouvez-vous montrer votre conseil source. Je ne peux pas lire une liste de diffusion. Pz je n'ai pas assez de temps – james

+0

je crée ce code en utilisant ByteToMessageDecoder BTW comment puis-je gérer mes données dynamiques.je ne pouvais pas connaître la taille des readableBytes. – james