打印从bytearrayoutputstream填充的字节数组

时间:2017-11-25 19:28:10

标签: java arrays bytearrayoutputstream

我使用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();
    }

请帮忙

2 个答案:

答案 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]范围内。