黑马程序员技术交流社区

标题: 字节流复制文件问题 [打印本页]

作者: 葛旭东    时间: 2012-11-9 23:08
标题: 字节流复制文件问题
本帖最后由 葛旭东 于 2012-11-12 11:01 编辑

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

如果就用字节流的read()方法的话,该怎么解决这个问题???
作者: 会飞的鱼    时间: 2012-11-11 14:18
read()方法只有在读到文件结尾时才会返回-1,根据jdk api描述,可看下图。


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

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

可以先读取首字节,不管它是不是-1,都把它写入,然后再循环读取后面字节。
作者: 会飞的鱼    时间: 2012-11-12 11:31
本帖最后由 阳永衡 于 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还会继续循环。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2