BufferedInputStream;
BufferedOutputStream;
BufferedReader;
BufferedWriter;
提高读写的效率.
能够提高读写速度的原因: 内部提供了一个缓冲区.
BufferedInputStream
源码
private static int DEFAULT_BUFFER_SIZE = 8192;
以下代码可以复制一个文件
package july11;
import java.io.*;
public class BufferedStreamDemo {
public static void main(String[] args) {
File in = new File("chinaman.rmvb");
File out = new File("chinaman1.rmvb");
FileInputStream fis = null;
FileOutputStream fos = null;
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
byte[] buf;
int len;
try {
fis = new FileInputStream(in);
bis = new BufferedInputStream(fis);
fos = new FileOutputStream(out);
bos = new BufferedOutputStream(fos);
buf = new byte[1024];
while ((len = bis.read(buf))!=-1) {
bos.write(buf, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
//要先关闭缓冲流, 再关闭内部的流. (顺序预创建顺序相反)
//关闭外部流时, 会自动关闭内部流.
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (bos != null) {
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//以下代码可以顺略
/*
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
*/
}
}
}
速度对比
chinaman.rmvb 的文件大小为1.16GB.
以下是程序输出
buffered: 1495
not buffered: 6361
package july11;
import java.io.*;
public class BufferedStreamDemo {
public static void main(String[] args) {
File in = new File("chinaman.rmvb");
File out = new File("chinaman1.rmvb");
FileInputStream fis = null;
FileOutputStream fos = null;
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
byte[] buf;
int len;
long startTime;
try {
fis = new FileInputStream(in);
bis = new BufferedInputStream(fis);
fos = new FileOutputStream(out);
bos = new BufferedOutputStream(fos);
buf = new byte[1024];
startTime = System.currentTimeMillis();
while ((len = bis.read(buf))!=-1) {
bos.write(buf, 0, len);
}
System.out.println("buffered: "+(System.currentTimeMillis() - startTime));
startTime = System.currentTimeMillis();
fis = new FileInputStream(in);
while ((len = fis.read(buf))!=-1) {
fos.write(buf, 0, len);
}
System.out.println("not buffered: "+(System.currentTimeMillis() - startTime));
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (bos != null) {
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}