黑马程序员技术交流社区
标题: java IO流的疑问 [打印本页]
作者: 黑马—陈磊 时间: 2012-6-12 15:05
标题: java IO流的疑问
我觉得可能是byte[] 数组定义过大了,但为什么会多出8M多,多出的文件是什么文件,复制好后的文件除了变大外还可以使用、、、
作者: 潘东升 时间: 2012-6-12 15:20
outbuffer.write(copt);
进行数据写入的时候,如果用的是字节数组,要加上数组缓冲数据的长度,如下:
outbuffer.write(copt, 0 ,len);
因为我们要写入的是读取的数据,读取的数据长度和数组的长度是不一样的,而原来数组当中存有数据,默认基本数据类型元素是0,读取数据到缓冲数组时会覆盖数组原来的数据,你这里读取的数据只能覆盖数组的一部分,所以你不指定要写入的长度,会把其他没覆盖的也写入了,也就是写入了整个数组的数据。还有,带缓冲的,最好都刷新。
作者: 姚玉鹏 时间: 2012-6-12 15:21
你这样是直接把10m的数组写出去了 改一下就好了 定义一个int 变量 然后写出变量大小的数组
try {
FileInputStream input = new FileInputStream("d:/Java编程思想第四版完整中文高清版%28免费%29.rar");
FileOutputStream output = new FileOutputStream("e:/Java编程思想第四版完整中文高清版%28免费%29.rar");
BufferedInputStream bufferinput = new BufferedInputStream(input);
BufferedOutputStream outbuffer = new BufferedOutputStream(output);
byte[] copt = new byte[1024*1024*10];
int len;
while((len=bufferinput.read(copt))!=-1){
outbuffer.write(copt,0,len);
}
bufferinput.close();
outbuffer.close();
input.close();
output.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
作者: 孙峰 时间: 2012-6-12 15:42
byte[] copt = new byte[1024*1024*10];
这里定义这个字节数组大小:10兆,
outbuffer.write(copt);
这里将整个字节数组都写入新文件中。而没有指定写入哪一部分。 原文件2兆,那么你定义的byte[] copt中还有8兆就是数组创建时默认值。之后一块写入。
这里应该:outbuffer.write(copt,0,len),指定将字节数组的一部分写入新文件中。 定义int len,因为 该read(),返回读取的字节数。令len=buffinput.read(copt), 对于你的这次操作,只取一次就可以了,len就是取到的2兆的字节数。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |