BufferedInputStream 字节缓冲输入流
特点:
BufferedInputStream不是节点流,属于处理流,高级流,所以需要通过其他节点流(使用底层的低级流InputStream派生类的对象实例)连接到具体的数据源/介质。
构造方法:
//继承FilterInputStream
//创建默认大小的输入缓冲区的缓冲字节输入流
public BufferedInputStream(InputStream in) {
this(in, defaultBufferSize);
}
//创建给定大小的输入缓冲区的缓冲字节输入流
public BufferedInputStream(InputStream in, int size) {
super(in);
if (size <= 0) {
throw new IllegalArgumentException("Buffer size <= 0");
}
buf = new byte[size];
}
方法介绍:
int read()
int read1(byte[] b, int off, int len)
int read(byte b[], int off, int len)
int available():返回可以从此输入流读取(或跳过)、且不受此输入流接下来的方法调用阻塞的估计字节数。接下来的调用可能是同一个线程,也可能是不同的线程。一次读取或跳过这么多字节将不会受阻塞,但可以读取或跳过数量更少的字节。
long skip(long n)
void mark(int readlimit)
void reset()
boolean markSupported()
void close()
//其他上述方法的作用于InputStream作用相同
读操作具体步骤:
1.创建BufferedInputStream对象;
2.从打开的字节缓冲输入流读取字节数据;
3.关闭流。
BufferedOutputStream 字节缓冲输出流
特点:
BufferedOutputStream实现缓冲的输出流。通过这种流,应用程序可以将各字节写入到底层输出流中,而不必针对每次字节写入调用底层系统,从而提高效率。
构造方法:
//继承FilterOutputStream
//可以指定缓冲区的大小,或者用默认的大小
public BufferedOutputStream(OutputStream out) {
this(out, 8192);
}
public BufferedOutputStream(OutputStream out, int size) {
super(out);
if (size <= 0) {
throw new IllegalArgumentException("Buffer size <= 0");
}
buf = new byte[size];
}
基本方法:
void write(int b)
void write(byte b[], int off, int len)
void flush()
写操作具体步骤:
1.创建BufferedOutputStream对象;
2.写入字节到缓冲输出流;
3.关闭流。
练习:
比较BufferedInputStream字符缓冲输入流的写入与FileInputStream读取数据效率。
/*
* 一个相对比较大的文件进行进行读取,FileInputStream和BufferInputStream 的耗时性比较*/
public class ComBufferFileIn190322 {
public static void main(String[] args) throws IOException {
long t1,t2;
t1 = System.currentTimeMillis();//获取系统的时间
String path = "G:\\test.txt";
FileInputStream fis = new FileInputStream(path);
int read = 0;
while ((read = fis.read()) != -1) {
fis.read();
}
fis.close();
t2 = System.currentTimeMillis();
System.out.println("使用文件输入流读取时间:"+(t2 - t1));
long t3,t4;
t3 = System.currentTimeMillis();
FileInputStream fileInputStream = new FileInputStream(path);
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
int red = 0;
while ((red = bufferedInputStream.read()) != -1) {
bufferedInputStream.read();
}
bufferedInputStream.close();
t4 = System.currentTimeMillis();
System.out.println("使用字节缓冲流读取的时间:"+ (t4 - t3));
}
}
//test.txt 文件是随机产生的数据,每一行的数据个数不定。
//output:
使用文件输入流读取时间:45
使用字节缓冲流读取的时间:1
结果充分体现了Buffered流提高访问效率的作用。