我使用ByteArrayOutputStream填充了一个字节数组。当我打印它时,输出很混乱。我需要一些指导。
这是我的代码:
{ MongoError: The field 'items' must be an array but is of type object in
document {_id: ObjectId('5a19ae2884d236048c8c91e2')}
这是我的输出:
ByteArrayOutputStream bout = new ByteArrayOutputStream();
DataOutputStream out = new DataOutputStream(bout);
try {
out.writeInt(150);
byte[] b = bout.toByteArray();
System.out.println(Arrays.toString(b));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
请帮忙
答案 0 :(得分:0)
150等于1001 0110 这是字节的位-128(最左边的位)加上2 + 4 + 16 = -106
答案 1 :(得分:0)
您将int
150写入out
。在二进制(特别是two's complement)中,此整数如下所示:
0000 0000 0000 0000 0000 0000 1001 0110
每组8位是一个字节的数据,类似于byte
数据类型。但是,与所有Java的整数类型(char
除外)一样,byte
已签名。因此,即使最后byte
的二进制值为1001 0110
,它也会显示为-106
,这是二进制补码中该字节的正确值。您可以使用以下命令替换print语句:
String[] strings = new String[b.length];
for (int i = 0; i < b.length; i++) {
strings[i] = Integer.toString(Byte.toUnsignedInt(b[i]));
}
System.out.println("[" + String.join(", ", strings) + "]");
将以无符号格式打印字节;每一个都将位于[0,255]范围内。