由之前字节输入的两个方式,我们可以发现,通过定义数组读取数组的方式比一个个字节读取的方式快得多。
所以,java就专门提供了带有缓冲区的字节类:
缓冲区类(高效类)
写数据:BufferedOutputStream
构造方法:
BufferedInputStream(InputStream in) 创建一个
BufferedInputStream
并保存其参数,即输入流 in
,以便将来使用。
BufferedInputStream(InputStream in, int size)
创建具有指定缓冲区大小的 BufferedInputStream
并保存其参数,即输入流 in
,以便将来使用。
读数据:BufferedInputStream
构造方法:
BufferedOutputStream(OutputStream out)
创建一个新的缓冲输出流,以将数据写入指定的底层输出流。
BufferedOutputStream(OutputStream out, int size) 创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入指定的底层输出流。
疑惑:
例如:BufferedOutputStream(OutputStream out)
为什么不传递一个具体的文件或者文件路径,而是传递一个OutputStream对象呢?
原因:
字节缓冲区流仅仅提供缓冲区,为高效而设计的。但是呢,真正的读写操作还得靠基本的流对象实现。
例子: BufferedOutputStream:相当于水杯
OutputStream:相当于水,解渴还得靠水
创建高效字节输出流对象,并输入数据
BufferedOutputStream out = new BufferedOutputStream( new FileOutputStream("c.txt"));
// 输出数据
out.write("javaIO".getBytes());
out.close();
创建高校字节输入流对象,并输出数据
BufferedInputStream bis = new BufferedInputStream(new FileInputStream( "bos.txt"));
byte[] bys = new byte[1024];
int len = 0;
while ((len = bis.read(bys)) != -1) {
System.out.print(new String(bys, 0, len));
}
// 释放资源
bis.close();