BufferedInputStream 和 BufferedOutputStream 为IO提供了带缓冲区的操作,打开文件进行写入或读取操作时,都会加上缓冲,这种流模式提高了IO的性能。
BufferedInputStream 和 BufferedOutputStream是继承的FilterInputStream,使用的是装饰模式,所以需要关联其他流才能使用(看构造方法就知道)。
BufferedInputStream的构造方法如下:
//创建一个 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。创建一个内部缓冲区数组并将其存储在 buf 中,该buf的大小默认为8192。
public BufferedInputStream(InputStream in);
//创建具有指定缓冲区大小的 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。创建一个长度为 size 的内部缓冲区数组并将其存储在 buf 中。
public BufferedInputStream(InputStream in,int size);
BufferedOutputStream的构造方法和上面的BufferedInputStream的构造方法一模一样。
BufferedInputStream常用方法:
int read()
见 read法 InputStream的一般合同。以整形的方式返回读取的下一个字节,如果到达文件末尾返回-1。
int read(byte[] b, int off, int len)
从给定的偏移开始,将字节输入流中的字节读入指定的字节数组。返回读取的字节数,如果到达文件末尾返回-1。
int available()
返回从该输入流中可以读取(或跳过)的字节数的估计值,而不会被下一次调用此输入流的方法阻塞。
void close()
关闭此输入流并释放与流相关联的任何系统资源。
void mark(int readlimit)
见的总承包 mark的方法 InputStream 。
boolean markSupported()
测试这个输入流是否支持 mark和 reset方法。
void reset()
见 reset法 InputStream的一般合同。
long skip(long n)
见 skip法 InputStream的一般合同。
BufferedInputStream常用方法:
void flush()
刷新缓冲输出流。
void write(byte[] b, int off, int len)
从指定的字节数组写入 len个字节,从偏移 off开始到缓冲的输出流。
void write(int b)
将指定的字节写入缓冲的输出流。
示例:
public static void inputByBuffered(File srcFile, File desFile) throws IOException {
if(!srcFile.exists()){
throw new IllegalArgumentException("文件" + srcFile + "不存在");
}
if(!srcFile.isFile()){
throw new IllegalArgumentException(srcFile + "不是一个文件");
}
FileInputStream fileInputStream = new FileInputStream(srcFile);
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
FileOutputStream fileOutputStream = new FileOutputStream(desFile);
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
byte[] bytes = new byte[1024*10];
int c = 0;
while((c = bufferedInputStream.read(bytes, 0, bytes.length)) != -1){
bufferedOutputStream.write(bytes, 0, bytes.length);
}
bufferedOutputStream.flush();
bufferedInputStream.close();
bufferedOutputStream.close();
}