public class FileStreamDemo {
public static void main(String[] args) {
try {
byte[] buffer = new byte[1024];// 来源文件
FileInputStream fileInputStream =
new FileInputStream(new File(args[0]));
// 目的文件
FileOutputStream fileOutputStream =
new FileOutputStream(new File(args[1]));// available()可取得未读取的数据长度
System.out.println("复制文件:" +
fileInputStream.available() + "字节");
/*这个循环不明白什么意思 ! 程序既然想用
buffer数组做缓冲区 为什么当源文件少于1024字节的时候
程序选择一个一个的读到目的文件中
if(fileInputStream.available() < 1024) {
// 剩余的数据比1024字节少
// 一位一位读出再写入目的文件int remain = -1;
while((remain = fileInputStream.read())
!= -1) {
fileOutputStream.write(remain);
} 如果用buffer一次性读入
不是好些么而当源文件大于1024字节的时候却又是用buffer来一
次性读入!这不是不能完全把复制么! 这是书上的列子 我看了
好久都不明白 请高手指点下,最好把这个循环没行语句的意思都做注解!
我想的是不用*/
while(true) {
if(fileInputStream.available() < 1024) {
// 剩余的数据比1024字节少
// 一位一位读出再写入目的文件int remain = -1;
while((remain = fileInputStream.read())
!= -1) {
fileOutputStream.write(remain);
}
break;
}
else {
// 从来源文件读取数据至缓冲区
fileInputStream.read(buffer);
// 将数组数据写入目的文件
fileOutputStream.write(buffer);
}
}// 关闭流
fileInputStream.close();
fileOutputStream.close();System.out.println("复制完成");
}
catch(ArrayIndexOutOfBoundsException e) {
System.out.println(
"using: java FileStreamDemo src des");
e.printStackTrace();
}
catch(IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
try {
byte[] buffer = new byte[1024];// 来源文件
FileInputStream fileInputStream =
new FileInputStream(new File(args[0]));
// 目的文件
FileOutputStream fileOutputStream =
new FileOutputStream(new File(args[1]));// available()可取得未读取的数据长度
System.out.println("复制文件:" +
fileInputStream.available() + "字节");
/*这个循环不明白什么意思 ! 程序既然想用
buffer数组做缓冲区 为什么当源文件少于1024字节的时候
程序选择一个一个的读到目的文件中
if(fileInputStream.available() < 1024) {
// 剩余的数据比1024字节少
// 一位一位读出再写入目的文件int remain = -1;
while((remain = fileInputStream.read())
!= -1) {
fileOutputStream.write(remain);
} 如果用buffer一次性读入
不是好些么而当源文件大于1024字节的时候却又是用buffer来一
次性读入!这不是不能完全把复制么! 这是书上的列子 我看了
好久都不明白 请高手指点下,最好把这个循环没行语句的意思都做注解!
我想的是不用*/
while(true) {
if(fileInputStream.available() < 1024) {
// 剩余的数据比1024字节少
// 一位一位读出再写入目的文件int remain = -1;
while((remain = fileInputStream.read())
!= -1) {
fileOutputStream.write(remain);
}
break;
}
else {
// 从来源文件读取数据至缓冲区
fileInputStream.read(buffer);
// 将数组数据写入目的文件
fileOutputStream.write(buffer);
}
}// 关闭流
fileInputStream.close();
fileOutputStream.close();System.out.println("复制完成");
}
catch(ArrayIndexOutOfBoundsException e) {
System.out.println(
"using: java FileStreamDemo src des");
e.printStackTrace();
}
catch(IOException e) {
e.printStackTrace();
}
}
}
楼主【yangyongjie81】截止到2008-06-24 16:46:55的历史汇总数据(不包括此帖):
发帖数:1 发帖分:20
结贴数:1 结贴分:20
未结数:0 未结分:0
结贴率:100.00% 结分率:100.00%
敬礼!
buffer多长算合适呢?多次读多次写和一次读写的最大区别在哪儿呢?
很好,如果buffer开的很大,内存消耗必然增加,
那么,我们有时候会比较随意的直接选择诸如1024或者65535作为buffer的大小了。疑问2、为啥会一个一个读
既然怀疑,为啥不自己直接改呢?while循环中的内容被我改了,楼主参考吧。 while (true) {
int len = fileInputStream.available();
if (len < 1024) {
//少于1024时,写入的内容从0到长度处
fileInputStream.read(buffer);
fileOutputStream.write(buffer, 0, len);
break;
} else {
// 从来源文件读取数据至缓冲区
fileInputStream.read(buffer);
// 将数组数据写入目的文件
fileOutputStream.write(buffer);
}
}