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 任何东西,它将字节数据值分配给作为参数传递的数组。
我用一个图像文件做了一些测试,我采取了两种方法:
打印 read() 方法 returned 的结果,直到这个结果为 -1(这意味着已经到达文件末尾)。
创建一个字节数组并将其作为 read(byte[] b) 方法的参数传递,并打印已分配给该字节数组的数字。
我注意到这两种情况的结果是不同的:在第二种情况下,由于结果是字节类型,因此数字不大于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
.
中得到的值
read() 方法 returns 一个表示数据的下一个字节的 int,而 read(byte[] b) 方法不 return 任何东西,它将字节数据值分配给作为参数传递的数组。
我用一个图像文件做了一些测试,我采取了两种方法:
打印 read() 方法 returned 的结果,直到这个结果为 -1(这意味着已经到达文件末尾)。
创建一个字节数组并将其作为 read(byte[] b) 方法的参数传递,并打印已分配给该字节数组的数字。
我注意到这两种情况的结果是不同的:在第二种情况下,由于结果是字节类型,因此数字不大于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
.