我正在尝试使用ByteBuf通过netty发送字符串。 首先,我将字符串转换为类似的字节数组:
byteBuf.writeInt(this.serverName.length());
byteBuf.writeInt(this.ipAdress.length());
byteBuf.writeBytes(this.serverName.getBytes(StandardCharsets.UTF_8));
byteBuf.writeBytes(this.ipAdress.getBytes(StandardCharsets.UTF_8));
这很好用,但我不知道如何读取字节以将它们转换回字符串?
我尝试过类似的东西:
int snLen = byteBuf.readInt();
int ipLen = byteBuf.readInt();
byte[] bytes = new byte[byteBuf.readableBytes()];
System.out.println(byteBuf.readBytes(bytes).readByte());
this.ipAdress = "";
必须有一些东西可以让字节回来。你可以从一个字符串发送字节但是不能在最后得到字节?似乎有一种方法,但我不知道如何做到这一点。
我希望你们中的任何人都可以帮助我。 提前致谢! :)
答案 0 :(得分:1)
在netty 4.1中,您可以使用:
byteBuf.writeCharSequence(...)
byteBuf.readCharSequence(...)
答案 1 :(得分:1)
如何使用Netty自己的StringEncoder和StringDecoder? http://netty.io/4.1/api/io/netty/handler/codec/string/StringEncoder.html
答案 2 :(得分:0)
这是一个未经测试的答案:
我假设数据顺序正确。
使用此方法" readBytes(ByteBuf dst,int length)" :readBytes
将发送方变更为:
byteBuf.writeInt(this.serverName.getBytes().length);
byteBuf.writeInt(this.ipAdress.getBytes().length);
接收方:
int snLen = byteBuf.readInt();
int ipLen = byteBuf.readInt();
byte[] bytesServerName = byte[snLen];
byte[] bytesIp = byte[ipLen];
byteBuf.readBytes(bytesServerName,snLen);
byteBuf.readBytes(bytesIp, ipLen);
String serverName = new String(bytesServerName);
String ipAddress = new String(bytesIp);
System.out.println(bytesServerName);
System.out.println(bytesIp);