黑马程序员技术交流社区
标题:
好吧,问一个很简单的问题,估计有人遇到得想半天
[打印本页]
作者:
潜伏
时间:
2013-12-6 23:29
标题:
好吧,问一个很简单的问题,估计有人遇到得想半天
例如:BufferedOutputStream bo=new BufferedOutputStream(s.getOutputStream());
BufferedInputStream bi=new BufferedInputStream(new FileInputStream(file));
byte[] arr=new byte[1024*1024];
int num=0;
while((num=bi.read(arr))!=-1)
{
bo.write(arr,0,num);
}
如果换成这样的
BufferedOutputStream bo=new BufferedOutputStream(s.getOutputStream());
BufferedInputStream bi=new BufferedInputStream(new FileInputStream(file));
byte[] arr=new byte[1024*1024];
int num=0;
while((num=bi.read(arr))!=0)
{
bo.write(arr,0,num);
}
下面的为啥错了??read(arr)=0和read(arr)=-1有啥区别,如果没读到不都是没有?
作者:
25343215
时间:
2013-12-6 23:37
我理解是这样的:
在IO中read方法,读取到文件末尾时,会返回-1,从而告诉我们读取结束。
而read返回0时,表示这次读取的数据长度为0,但是后面有可能还有数据啊。
作者:
然后呢
时间:
2013-12-6 23:47
本帖最后由 然后呢 于 2013-12-6 23:49 编辑
只有读到没有元素或者对象是就返回-1,其他数他不认识
作者:
王家胜
时间:
2013-12-7 02:54
public abstract int read()
throws IOException从输入流中读取数据的下一个字节。返回 0 到 255 范围内的 int 字节值。如果因为已经到达流末尾而没有可用的字节,则返回值 -1。在输入数据可用、检测到流末尾或者抛出异常前,此方法一直阻塞。
子类必须提供此方法的一个实现。
返回:
下一个数据字节;如果到达流的末尾,则返回 -1。
抛出:
IOException - 如果发生 I/O 错误。
作者:
肖川
时间:
2013-12-7 10:12
查看JDK文档。InputStreamReader的read方法。返回:读取的字符数,如果已到达流的末尾,则返回 -1
而num=bi.read(arr))!=0并不能表示文件已经结束,有可能读取的这一段数据为空,所以返回值就是0了,那不是你就认为已经读取到文件末尾了?多查文档,少问奇怪问题。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2