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



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

所以我的问题是,如果据称 Java 中甚至不存在(或不支持),为什么Files.readAllBytes(Paths.get(path))会产生无符号字节,我该如何规避它?

我将不胜感激任何帮助。

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

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

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

例如:

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

将打印:

11111111

最新更新