@Override public void channelRead(final ChannelHandlerContext ctx, Object msg) throws IOException { ByteBuf byteBuf = (ByteBuf) msg; ByteBuf byteBuf1 = Unpooled.copiedBuffer(byteBuf); byte[] bytes = ByteBufUtil.getBytes(byteBuf1); boolean flag = byteBuf1.readBoolean(); if (flag) { int str_length1 = byteBuf1.readInt(); ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes, 5, str_length1); byte[] new_bytes = new byte[str_length1]; while (inputStream.read(new_bytes) != -1) { inputStream.close(); String plain = new String(new_bytes, CharsetUtil.UTF_8); if (plain.equalsIgnoreCase("PLAIN")) { int aInt = byteBuf1.getInt(11); String sql = parseBytesToString(byteBuf1, 11, aInt); String[] split = sql.split("\u0000"); if (split.length==2){ String userName = split[0]; String passWord = split[1]; System.out.println("userName = "+ userName); System.out.println("passWord = "+ passWord); } } } } byteBuf1.resetReaderIndex();// byte[] bytes = ByteBufUtil.getBytes(byteBuf1); int size = byteBuf1.readInt(); if (size>0 && byteBuf1.capacity()>=size){ short unused = byteBuf1.readShort(); short message_type = byteBuf1.readShort(); int str_length = byteBuf1.readInt(); ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes,12,str_length); byte[] new_bytes = new byte[str_length]; while (inputStream.read(new_bytes)!=-1){ inputStream.close(); String statement = new String(new_bytes, CharsetUtil.UTF_8);// System.out.println(statement); if (statement.equalsIgnoreCase("ExecuteStatement")){ byte aByte = byteBuf1.getByte(95); String sql = parseBytesToString(byteBuf1, 84, aByte); System.out.println("sql ==== > " + sql); } } } if (outboundChannel.isActive()) { outboundChannel.writeAndFlush(msg).addListener(new ChannelFutureListener() { @Override public void operationComplete(ChannelFuture future) { if (future.isSuccess()) { // was able to flush out data, start to read the next chunk ctx.channel().read(); } else { future.channel().close(); } } }); } }