使用byte []数组通过ByteBuf读写字符串

时间:2017-08-18 18:16:26

标签: java netty

我正在尝试使用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 = "";

必须有一些东西可以让字节回来。你可以从一个字符串发送字节但是不能在最后得到字节?似乎有一种方法,但我不知道如何做到这一点。

我希望你们中的任何人都可以帮助我。 提前致谢! :)

3 个答案:

答案 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);