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

时间:2017-08-25 16:45:13

标签: java byte fileinputstream fileoutputstream

read()方法返回一个int,表示数据的下一个字节并读取(byte [] b)方法不返回任何内容,它将字节数据值分配给作为参数传递的数组。

我已经使用图像文件进行了一些测试,我采用了两种方法:

  • 打印read()方法返回的结果,直到此结果为-1(表示已到达文件的末尾)。

  • 创建一个字节数组并将其作为read(byte [] b)方法的参数传递,并打印已分配给该字节数组的数字。

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

由于两种情况下文件相同而这些数字代表该文件的数据,两种情况下的数字是否应该相同?

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

谢谢。

1 个答案:

答案 0 :(得分:1)

由于Java只有签名数据类型,read(byte[] b)读取常规字节,即-128-127。但是,read()会返回int,因此它可以使用-1指示流的结尾,并从0-255返回无符号字节值。

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

会给你一个未签名的字节,看起来像你byte[] b中的值。