黑马程序员技术交流社区
标题:
一个关于BufferedInputStream和BufferedOutputStream的疑问
[打印本页]
作者:
张超超
时间:
2012-4-18 16:54
标题:
一个关于BufferedInputStream和BufferedOutputStream的疑问
Java代码
BufferedInputStream in =
new
BufferedInputStream(
new
FileInputStream("oneFile"));
BufferedOutputStream out =
new
BufferedOutputStream(
new
FileOutputStream("oneFile_copy"));
ArrayList content =
new
ArrayList();
byte
[] data =
new
byte
[1024];
while
(in.read(data) != -1) {
content.add(data);
}
for
(
int
i=0; i<content.size(); i++) {
out.write((
byte
[])content.get(i));
}
这样新生成的oneFile_copy文件大小和原文件一样,可里面的内容却只是不断重复"oneFile"中一部分内容。把while循环中的写成下面这样:
Java代码
while
(in.read(data) != -1) {
content.add(data);
data =
null
;
data =
new
byte
[1024];
}
while(in.read(data) != -1) {content.add(data);data = null;data = new byte[1024];}
之后新生成的文件内容就没有问题了。
小弟不解的就是为什么前一种写法会不行,不重新new data对象为什么就会得到重复的部分数据
作者:
liuyang
时间:
2012-4-18 17:04
6.while(in.read(data) != -1) {
7.content.add(data);
8.}
就像你写的如果上面缺少下面代码
3.data = null;
4.data = new byte[1024];
那么你的数组里存的永远是以前的内容,所以也就出现内容重复了
作者:
chenwei
时间:
2012-4-18 17:37
data=null;是释放之前的数组占用的空间;data=new byte [1024] ;是创建一个新数组
在做这些是为了初始化数组,清空里面的元素
不清空的话数组里面有元素先直接返回元素,没有的话才会在文件中读取数组放到数组中,再返回
所以才会一直重复
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2