2016-06-16 8 views
0

Ich habe eine Anwendung, die LogRecord über TCP sendind und ich möchte diese Protokolle erfassen. Ich bin neu mit Netty und nachdem ich mit einigen Beispielen geträufelt habe, kann ich die LogRecord Objekte nicht lesen.Wie kann ich LogRecord mit Netty erhalten?

Ich versuchte, das Array von Bytes zu erhalten, um das Objekt zu deserialisieren, aber ich bekomme Fehler. Jemand kann mir ein gutes Beispiel oder Trinkgeld nennen. Hier

ist der Code:

@Component 
@Qualifier("socketChannelInitializer") 
public class SocketChannelInitializer extends ChannelInitializer<SocketChannel> { 

    private static final ByteArrayDecoder DECODER = new ByteArrayDecoder(); 
    private static final ByteArrayEncoder ENCODER = new ByteArrayEncoder(); 

    @Autowired 
    @Qualifier("socketServerHandler") 
    private ChannelInboundHandlerAdapter socketServerHandler; 

    @Override 
    protected void initChannel(SocketChannel socketChannel) throws Exception { 
     ChannelPipeline pipeline = socketChannel.pipeline(); 

     // Add the text line codec combination first, 
     pipeline.addLast(new DelimiterBasedFrameDecoder(1024 * 1024, Delimiters.lineDelimiter())); 
     // the encoder and decoder are static as these are sharable 
     pipeline.addLast(DECODER); 
     pipeline.addLast(ENCODER); 

     pipeline.addLast(socketServerHandler); 
    } 
} 

Hier ist ein Teil des Handlers:

@Override 
protected void channelRead0(ChannelHandlerContext ctx, byte[] msg) throws Exception { 
    ByteBuffer byteBuffer = ByteBuffer.wrap(msg).asReadOnlyBuffer(); 

} 

Antwort

0

Die Magie ist in dieser Klasse

public class LogRecordDecoder extends ByteToMessageDecoder { 
    @Override 
    protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) { 

     LogRecord logRecord = null; 
     byte[] bytes = new byte[in.readableBytes()]; 
     int readerIndex = in.readerIndex(); 
     in.getBytes(readerIndex, bytes); 

     ObjectInputStream ois = null; 
     ByteArrayInputStream inn = new ByteArrayInputStream(bytes); 

     try { 
      ois = new ObjectInputStream(inn); 
      logRecord = (LogRecord) ois.readObject(); 
      out.add(logRecord); 
     } catch (Exception e) { 

     } 
    } 
} 
Verwandte Themen