A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

例如: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有啥区别,如果没读到不都是没有?

评分

参与人数 1技术分 +1 收起 理由
贺奕凯 + 1

查看全部评分

4 个回复

倒序浏览
我理解是这样的:
        在IO中read方法,读取到文件末尾时,会返回-1,从而告诉我们读取结束。
         而read返回0时,表示这次读取的数据长度为0,但是后面有可能还有数据啊。
回复 使用道具 举报
本帖最后由 然后呢 于 2013-12-6 23:49 编辑

只有读到没有元素或者对象是就返回-1,其他数他不认识
回复 使用道具 举报
public abstract int read()
                  throws IOException从输入流中读取数据的下一个字节。返回 0 到 255 范围内的 int 字节值。如果因为已经到达流末尾而没有可用的字节,则返回值 -1。在输入数据可用、检测到流末尾或者抛出异常前,此方法一直阻塞。
子类必须提供此方法的一个实现。
返回:
下一个数据字节;如果到达流的末尾,则返回 -1。
抛出:
IOException - 如果发生 I/O 错误。

评分

参与人数 1黑马币 +3 收起 理由
简★零度 + 3

查看全部评分

回复 使用道具 举报
查看JDK文档。InputStreamReader的read方法。返回:读取的字符数,如果已到达流的末尾,则返回 -1
而num=bi.read(arr))!=0并不能表示文件已经结束,有可能读取的这一段数据为空,所以返回值就是0了,那不是你就认为已经读取到文件末尾了?多查文档,少问奇怪问题。

评分

参与人数 1黑马币 +3 收起 理由
简★零度 + 3

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马