所以我遇到的问题是,我想将任何文件作为字节数组读取,然后用它做一些事情。但是,“do-something-with-it”不起作用,因为如果使用的字节超出了有符号字节的范围,这些方法会抛出异常,这正是Files.readAllBytes(Paths.get(path))
生成的。我测试的文件的第一个字节是11101111 (=-17)
。然而,奇怪的是,文本文件不会出现此问题。
所以我的问题是,为什么Files.readAllBytes(Paths.get(path))
产生无符号字节,如果它们据称甚至不存在于java中(或者不受支持),我怎么能绕过它呢?
如果有任何帮助,我将不胜感激。
答案 0 :(得分:0)
我认为你被java.lang.Byte.toString()欺骗了,默认情况下打印签名的字节表示。
返回表示此Byte值的String对象。 该值将转换为带符号的十进制表示并作为字符串返回,就像字节值作为toString(byte)方法的参数一样。
但该字节仍然是签名的:) 这是您的工作,将其作为签名值处理。
例如:
byte sample = (byte) -1;
System.out.println(Integer.toBinaryString(sample & 0xFF))
将打印:
11111111