关于一道while循环的问题

如下:
while((len=in.read(data))!=-1){
outputstream.write(data,0,len);
}
(len=in.read(data))会等于-1吗?什么时候会等于-1?如果不会等于-1,那么这个循环岂不成了死循环了吗?

4个回答

io read是读取数据流的,当读到流的结尾即EOF时会返回-1,你放心不会出现死循环的,不会有无限大的数据流,文件的大小是有限制的

当读到文件结尾 即EOF时返回-1

jinnianshilongnian
jinnianshilongnian public int read() throws IOException从此输入流中读取下一个数据字节。返回一个 0 到 255 范围内的 int 字节值。如果因为已经到达流末尾而没有字节可用,则返回 -1。在输入数据可用、检测到流末尾或抛出异常之前,此方法将一直阻塞。 此方法只执行 in.read() 并返回结果。 指定者: 类 InputStream 中的 read 返回: 下一个数据字节;如果已到达流末尾,则返回 -1。 抛出: IOException - 如果发生 I/O 错误。 另请参见: in
接近 8 年之前 回复

查一下API就知道了[quote]public abstract int read()
throws IOException从输入流读取下一个数据字节。返回 0 到 255 范围内的 int 字节值。如果因已到达流末尾而没有可用的字节,则返回值 -1。在输入数据可用、检测到流的末尾或者抛出异常前,此方法一直阻塞。
子类必须提供此方法的一个实现。

返回:
下一个数据字节,如果到达流的末尾,则返回 -1。
抛出:
IOException - 如果发生 I/O 错误。
[/quote]
由类java.io.InputStream定义了该规范,其子类实现时都依循此规范

会等于-1的,当读到文件结尾是返回EOF,实际上EOF的值通常是-1,也可以使用如下方式

while((len=in.read(data))>0){}

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐