繁体   English   中英

如何使用Java ByteBuffer处理负数int

[英]How to handle negative int with Java ByteBuffer

我有一个Android应用程序,该应用程序使用ByteBuffer将整数数组(转换为字符串)发送到用Ruby编写的服务器。 服务器获取字符串并将其解压缩。 我构建ByteBuffer代码如下所示:

ByteBuffer bytes = ByteBuffer.allocate(16);
bytes.order(ByteOrder.LITTLE_ENDIAN);

bytes.putInt(int1);
bytes.putInt(int2);
bytes.putInt(int3);
bytes.putInt(int4);

String byteString = new String(bytes.array());

当int均为正值时,这非常有用。 当它具有负整数时,事情就会出错。 例如,在iOS中,当我提交诸如[1,1,-1,0]之类的整数数组时,服务器上的字节字符串为:

"\x01\x00\x00\x00\x01\x00\x00\x00\xFF\xFF\xFF\xFF\x00\x00\x00\x00"

正确解压到[1,1,-1,0]。

但是,在Android中,当我尝试提交相同的[1,1,-1,0]数组时,我的字符串是:

"\x01\x00\x00\x00\x01\x00\x00\x00\xEF\xBF\xBD\xEF\xBF\xBD\xEF\xBF\xBD\xEF\xBF\xBD\x00\x00\x00\x00"

将其解压缩为[1,1,-272777233,-1074807361]。

如果我将负整数转换为无符号整数:

byte intByte = (byte) -1;
int unsignedInt = intByte & 0xff;

我得到以下内容:

"\x01\x00\x00\x00\x01\x00\x00\x00\xEF\xBF\xBD\x00\x00\x00\x00\x00\x00\x00"

将其解压缩为[1,1,12435439,0]。 我希望有人可以帮助我弄清楚如何正确处理此问题,以便我可以正确发送负值。

您的问题在这里:

String byteString = new String(bytes.array());

你为什么要这么做? 您要发送字节流,那么为什么将其转换为char的流?

如果要发送字节,请发送字节。 使用OutputStream而不是Writer ; 使用InputStream而不是Reader 整数是“负”还是“正”这一事实无关紧要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM