Java - FileInputStream 中的读取方法 - 为什么 read() 和 read(byte[] b) 中的数字不同?

Java - read method in FileInputStream - Why the numbers are different in read() and in read(byte[] b)?

read() 方法 returns 一个表示数据的下一个字节的 int,而 read(byte[] b) 方法不 return 任何东西,它将字节数据值分配给作为参数传递的数组。

我用一个图像文件做了一些测试,我采取了两种方法:

我注意到这两种情况的结果是不同的:在第二种情况下,由于结果是字节类型,因此数字不大于127或小于-128;例如,在第一种情况下,我发现数字大于 200。

由于文件在两种情况下都相同,并且这些数字代表该文件的数据,因此两种情况下的数字不应该相同吗?

我还使用 FileOutputStream 将文件的数据写入另一个新文件,在这两种情况下,新文件具有相同的字节并且看起来相同(如我所说,它是一个图像)。

谢谢。

由于 Java 只有带符号的数据类型,read(byte[] b) 读取常规字节,即 -128-127。但是 read() returns 和 int 所以它可以用 -1 指示流的结尾,从 [=16= 返回 unsigned 字节值].

byte b = (byte)in.read(); // Provided that stream has data left

会给你一个无符号字节,看起来像你在 byte[] b.

中得到的值