Java笔记 使用字节缓冲流复制文件
Java笔记
字节缓冲流
- BufferedOutputStream
- BufferedInputStream
练习:使用字节缓冲流复制文件
导入包:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.junit.Test;
测试方法:
public class Demo06_Practice {
@Test
public void testCopy() {
long start = System.currentTimeMillis();//记录法一开始复制的时间
copyByByte("TestIO\\5m.jpg","TestIO\\copy1.jpg");//调用法一复制
System.out.println(System.currentTimeMillis()-start); //输出复制法一所用时间
start = System.currentTimeMillis();//记录法二开始复制的时间
copyByByteArray("TestIO\\5m.jpg","TestIO\\copy2.jpg");//调用法一复制
System.out.println(System.currentTimeMillis()-start); //输出复制法二所用时间
}
使用read();方法一个字节一个字节复制,效率慢,该方法返回的是一个int类型的字节
public static void copyByByte(String sourceName,String targetName) {
BufferedInputStream input = null;//声明流对象 放在try外部,以便在finally关闭流
BufferedOutputStream output = null;
try {
input = new BufferedInputStream(new FileInputStream(sourceName)); //构建流对象
output = new BufferedOutputStream(new FileOutputStream(targetName));
int data = -1;
while( (data = input.read())!=-1 ) {
output.write(data);
}
} catch (IOException e) { // 捕获异常
e.printStackTrace();//打印栈信息
} finally {//输入流与输出流分别放在不同的try语句中关闭
try {
if(input!=null)
input.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
if(output!=null)
output.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
使用read(byte[] b)方法进行字节数组复制,效率快,该方法返回的是所读字节数。
public static void copyByByteArray(String sourceName,String targetName) {
BufferedInputStream input = null;
BufferedOutputStream output = null;
try {
input = new BufferedInputStream(new FileInputStream(sourceName));
output = new BufferedOutputStream(new FileOutputStream(targetName));
byte[] data = new byte[1024];
int length = -1;
while( (length = input.read(data))!=-1 ) {
output.write(data, 0, length);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if(input!=null)
input.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if(output!=null)
output.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}