原创

netty ByteBuf转String, netty String转ByteBuf, BinaryWebSocketFrame转String

1.介绍

所有的网络通讯都涉及到数据的交互,数据的交互本质上就是字节序列的移动。为了实现网络通信的高效性,我们通常需要一个缓冲区来存储这些字节序列。在NIO中我们使用>ByteBuffer作为它的字节容器,但是这个类的方法使用起来过于复杂,在日常的编程工作中显得有些繁琐。
Netty为此提供了一款替代ByteBuffer的的组件:ByteBuf,它既解决了 JDK API 的局限性,又为网络应用程序的开发者提供了更好的 API。

2.ByteBuf转String,BinaryWebSocketFrame转String

    BinaryWebSocketFrame binaryWebSocketFrame = (BinaryWebSocketFrame) frame;
    ByteBuf content = binaryWebSocketFrame.content();

    byte[] req = new byte[content.readableBytes()];
    content.readBytes(req);
    String body = new String(req,"UTF-8");
    System.out.println("二进制数据->"+content+",转str->"+body);

效果

收到二进制数据
二进制数据->PooledUnsafeDirectByteBuf(ridx: 12, widx: 12, cap: 12),转str->Hello World!

3.netty String转ByteBuf

String msg = "服务端收到信息->"+body;
byte[] bytes = msg.getBytes(CharsetUtil.UTF_8);
ByteBuf buf = Unpooled.wrappedBuffer(bytes);
ctx.writeAndFlush(new BinaryWebSocketFrame(buf));
正文到此结束
本文目录