一、使用带缓冲的字节流读写数据
示例:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class ReadByBufferedByteStream {
public static void main(String[] args) {
try {
FileInputStream fis = new FileInputStream("test.mp4");
BufferedInputStream bis = new BufferedInputStream(fis, 100000);// 设定缓冲区大小为100000
FileOutputStream fos = new FileOutputStream("test_copy.mp4");
BufferedOutputStream bos = new BufferedOutputStream(fos, 100000);// 设定缓冲区大小为100000
byte input[] = new byte[100];// 字节数组为100
int count = 0;
long before = System.currentTimeMillis();
while (bis.read(input) != -1) {
bos.write(input);
count++;
}
bis.close();
fis.close();
bos.close();
fos.close();
System.out.println("用时:" + (System.currentTimeMillis() - before)
+ "ms");
System.out.println("读取了:" + count + "次");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
结果:
二、使用不带缓冲的字节流(对比上述示例)
示例:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyByByteStream {
public static void main(String[] args) {
try {
FileInputStream fis = new FileInputStream("test.mp4");
FileOutputStream fos = new FileOutputStream("test_copy.mp4");
byte input[] = new byte[100];
int count = 0;
// bytes[50]不够存储图片,所以要用while
long before = System.currentTimeMillis();
while (fis.read(input) != -1) {
count++;
fos.write(input);
}
fis.close();
fos.close();
System.out.println("用时:" + (System.currentTimeMillis() - before)
+ "ms");
System.out.println("读取了:" + count + "次");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
结果:
可以看出时间相对长很多!
因为字节数组为同为100,所以读取次数相同!