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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

用单个字节操作字节流时因为系统判断当read方法返回为-1时就认为这个文件已经读完就结束,因为int b代表的是具体的内容所以循环条件定为!=-1。可是用自定义小数组操作时,int len代表的是每次读取的有效字节个数,那是不是循环条件定位len>0更加贴切???因为这里的len跟具体内容无关也就是跟结束前返回的-1无关,我这个理解对么??

3 个回复

倒序浏览
个人理解:确实可以这么做,但是在API中规定如果没有读取到,返回就是 -1,如果你这么写,那么其他人不好理解。
回复 使用道具 举报
suifeng1987 来自手机 中级黑马 2016-8-23 09:23:56
藤椅
tbh 发表于 2016-8-22 13:37
个人理解:确实可以这么做,但是在API中规定如果没有读取到,返回就是 -1,如果你这么写,那么其他人不好理 ...

嗯,我觉得这样写容易区分返回的int 数代表的意义,可能也是因为不熟才想这样,实际开发中还是遵从规定吧
回复 使用道具 举报
read
public int read(byte[] b)
         throws IOException从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。以整数形式返回实际读取的字节数。在输入数据可用、检测到文件末尾或者抛出异常前,此方法一直阻塞。
如果 b 的长度为 0,则不读取任何字节并返回 0;否则,尝试读取至少一个字节。如果因为流位于文件末尾而没有可用的字节,则返回值 -1;否则,至少读取一个字节并将其存储在 b 中。

将读取的第一个字节存储在元素 b[0] 中,下一个存储在 b[1] 中,依次类推。读取的字节数最多等于 b 的长度。设 k 为实际读取的字节数;这些字节将存储在 b[0] 到 b[k-1] 的元素中,不影响 b[k] 到 b[b.length-1] 的元素。

类 InputStream 的 read(b) 方法的效果等同于:

read(b, 0, b.length)
这是在API中查看到的,如果说len>0,不严谨,因为可能b长度可能为0,大于-1为了 至少能够读取到一个字节
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马