【发布时间】:2012-04-08 05:19:56
【问题描述】:
This 页面显示是这样,当它想指示没有更多字节要读取时,该方法可以返回 -1。
但是一个字节的范围是 -128 到 127,对吧?而且 read() 的返回类型是字节不是更有意义吗,因为它返回一个字节?
感谢您的宝贵时间。
【问题讨论】:
标签: java byte fileinputstream
This 页面显示是这样,当它想指示没有更多字节要读取时,该方法可以返回 -1。
但是一个字节的范围是 -128 到 127,对吧?而且 read() 的返回类型是字节不是更有意义吗,因为它返回一个字节?
感谢您的宝贵时间。
【问题讨论】:
标签: java byte fileinputstream
它返回值作为int 的原因是它需要返回一个介于 0-255 之间的值,并且能够指示何时没有更多字节可从文件中读取。通过使用 int,您可以返回 0-255 的全部正无符号值,并指示文件何时完成。它不能只提供 byte 值的 256 个不同值,Java 默认情况下其中一半是负数。
【讨论】:
【讨论】:
read() 方法。一个返回单个字节;其他人填充一个数组并返回已读取的 number 个字节。
一个字节的数据是一个无符号值,范围从0到255,而java中的byte定义为从-128到127,这在以下情况下没有意义读取二进制数据。 read() 返回一个整数,允许它使用所有非负值表示有效数据,并返回一个负值表示数据结束。
一般来说,一个函数应该使用一种不同于它用来返回数据的机制来指示错误条件或异常。在最简单的情况下,它可以返回一个不能用来表示有效数据的值,以确保其含义明确。
【讨论】:
问:read() 的返回类型是否更有意义? 字节?
A:不,因为“byte”不能返回整个范围 0..255(无符号),而“short”只是一个 PITA。
【讨论】:
int 值,所以如果它是 short,您需要进行从 short 到 int 的转换,即使转换已处理由 Java 引擎自动生成
FileInputStream 类可以将文件内容作为字节流读取。这是一个简单的例子:
InputStream input = new FileInputStream("c:\\data\\input-text.txt");
int data = input.read();
while(data != -1) {
//do something with data...
doSomethingWithData(data);
data = input.read();
}
input.close();
注意:为清楚起见,此处已跳过正确的异常处理。要了解有关正确异常处理的更多信息,请转到 Java IO 异常处理。
FileInputStream 的 read() 方法返回一个 int,其中包含所读取字节的字节值。如果 read() 方法返回 -1,则流中没有更多数据要读取,可以将其关闭。也就是说,-1 作为 int 值,而不是 -1 作为字节值。这里有区别!
【讨论】:
( (byte) -1 ) == ( (int) -1 )的评价是什么?当然是true,因为字节是从-128到127,这意味着-1也是合法的字节值。