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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 葛旭东 中级黑马   /  2012-11-9 23:08  /  1959 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 葛旭东 于 2012-11-12 11:01 编辑

用字节流复制mp3、图片、视频等时,有可能读取的第一个字节就是-1,导致后面的不再继续读下去。

如果就用字节流的read()方法的话,该怎么解决这个问题???

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

3 个回复

倒序浏览
read()方法只有在读到文件结尾时才会返回-1,根据jdk api描述,可看下图。


只要你读到了数据,它就会返回0---255,这个返回的数据并不是你读到的数据。
只要你读到了数据就不会返回-1,反之就返回-1。
所以就算你的文件的第一个字节是-1,他也不会返回-1,因为你读到了数据,他返回的是0---255。
回复 使用道具 举报
阳永衡 发表于 2012-11-11 14:18
read()方法只有在读到文件结尾时才会返回-1,根据jdk api描述,可看下图。

字节流是一个字节一个字节读取的,首字节可能为-1,导致循环停止。

可以先读取首字节,不管它是不是-1,都把它写入,然后再循环读取后面字节。
回复 使用道具 举报
本帖最后由 阳永衡 于 2012-11-12 11:33 编辑
葛旭东 发表于 2012-11-12 11:00
字节流是一个字节一个字节读取的,首字节可能为-1,导致循环停止。

可以先读取首字节,不管它是不是-1, ...

要是在中间又读到一个或多个-1 叻??你又在什么时候跳出??他返回的并不是你读到的字节,就算你读到了-1,他也不会返回-1,而是返回0。你可以这么理解,假设我们读到的数据是byte,他就会判断byte是否为null(没读到数据了,空格跟换行都有对应的字节对应,所以还是读到了数据),如果为null就返回-1。如果不能null,比如说读到了-1,那btye就不为null了,所以就返回0。那么0还是!=-1,所以while还会继续循环。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马