read()方法返回一个int,表示数据的下一个字节并读取(byte [] b)方法不返回任何内容,它将字节数据值分配给作为参数传递的数组。
我已经使用图像文件进行了一些测试,我采用了两种方法:
打印read()方法返回的结果,直到此结果为-1(表示已到达文件的末尾)。
创建一个字节数组并将其作为read(byte [] b)方法的参数传递,并打印已分配给该字节数组的数字。
我注意到两种情况下的结果都不同:在第二种情况下,由于结果是字节类型,数字不大于127或小于-128;而在第一种情况下,我发现数字大于200,例如。
由于两种情况下文件相同而这些数字代表该文件的数据,两种情况下的数字是否应该相同?
我还使用FileOutputStream将文件的数据写入另一个新文件,在这两种情况下,新文件具有相同的字节并且看起来相同(正如我所说,它是一个图像)。
谢谢。
答案 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
中的值。