Java Files.readAllBytes(Paths.get(path))生成无符号字节

时间:2014-01-12 10:48:02

标签: java

所以我遇到的问题是,我想将任何文件作为字节数组读取,然后用它做一些事情。但是,“do-something-with-it”不起作用,因为如果使用的字节超出了有符号字节的范围,这些方法会抛出异常,这正是Files.readAllBytes(Paths.get(path))生成的。我测试的文件的第一个字节是11101111 (=-17)。然而,奇怪的是,文本文件不会出现此问题。

所以我的问题是,为什么Files.readAllBytes(Paths.get(path))产生无符号字节,如果它们据称甚至不存在于java中(或者不受支持),我怎么能绕过它呢?

如果有任何帮助,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

我认为你被java.lang.Byte.toString()欺骗了,默认情况下打印签名的字节表示。

  

返回表示此Byte值的String对象。 该值将转换为带符号的十进制表示并作为字符串返回,就像字节值作为toString(byte)方法的参数一样。

但该字节仍然是签名的:) 这是您的工作,将其作为签名值处理。

例如:

byte sample = (byte) -1;
System.out.println(Integer.toBinaryString(sample & 0xFF))

将打印:

11111111