package com.Class06.Stream;
import java.io.*;
public class CopyDemo {
public static void main(String[] args) {
File fileIn = new File("In.txt");
File fileOut = new File("Out.txt");
InputStream inputStream = null;
OutputStream outputStream = null;
try {
inputStream = new FileInputStream(fileIn);
outputStream = new FileOutputStream(fileOut);
byte[] buffer = new byte[1024];
int length = 0;
while( (length = inputStream.read(buffer)) != -1){
System.out.println(new String(buffer,0,length));
outputStream.write(buffer);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}finally {
try {
inputStream.close();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println("End");
}
}
如上,虽然以这种方法可以实现buffer的整体复制,但此处调用的write方法未输入长度,即默认全部复制buffer内容。
此时,倘若我们的buffer大小设置过大,而我们未全部填满的时候,剩余空间会被默认填满“0”,以这种write方法进行copy的时候,我们会把大量的0也一起copy过来,这里,我们添加一个遍历,获取准确的buffer有效数据长度后再进行复制。
int Count = 0;
for( int i = 0; i < buffer.length; i++){
if( buffer[i] != 0)
Count++;
}
System.out.println(Count);
outputStream.write(buffer,0,Count);


