JAVA——缓冲流 (字节缓冲流读取文件)
1.字节缓冲流
字节流一次读写一个数组的速度明显比一次读写一个字节的速度快很多,
这是加入了数组这样的缓冲区效果,java本身在设计的时候,也考虑到了这样的情况,
所以提供了字节缓冲区流
字节缓冲输出流
BufferedOutputStream
字节缓冲输入流
BufferedInputStream
缓冲流:要创建缓冲流对象,必须找构造方法中,接收一个普通的相应类型数输入/输出字节流对象,即
缓冲流,是基于一个已有的底层字节流,创建出来的。
所以,看起来缓冲流,是通过包装了一个底层普通字节流,得到的。 这种流,我们统称为包装流
在关闭流的时候,只需要关闭,包装流,不需要关闭包装流所包装的底层流,因为包装流自己会负责自己所包装的底层流
复制文件: 用缓冲流完成
缓冲流的注意事项:
1. 当使用缓冲字节输出流的write方法,写数据到外部设备的时候
2. 当我们写入少量数据的时候(缓冲区数据还没满),默认情况下,数据是不会写入外部设备
3. 如果我们希望,把缓冲区中的数据,强行写入底层流,从而写入外部设备
a. 缓冲流对象上调用.flush
public void flush()
刷新此缓冲的输出流。这迫使所有缓冲的输出字节被写出到底层输出流中。
b. 缓冲流对象.clase
public void close()
关闭此输出流并释放与此流有关的所有系统资源。
FilterOutputStream 的 close 方法先调用其 flush 方法,然后调用其基础输出流的 close 方法。
public class Demo1 {
public static void main(String[] args) throws IOException {
// 1.缓冲字节输出流 BufferedOutputStream(OutputStream out) // 输出到某个文件
FileOutputStream fos = new FileOutputStream("b.txt",true);
OutputStream out = new BufferedOutputStream(fos);
// BufferedInputStream(InputStream in)
FileInputStream fis = new FileInputStream("a.txt"); // 从某个文件读取
InputStream in = new BufferedInputStream(fis);
// 注意事项, 缓冲字节流的write
out.write("wuliuqi".getBytes());
out.flush();
//关闭流
out.close();
in.close();
}
private static void method(OutputStream out, InputStream in) throws IOException {
int len;
byte[] byteBuffer = new byte[1024];
while ((len = in.read(byteBuffer)) != -1) {
// 将读取的多个字节,写入缓冲字节输出流
out.write(byteBuffer, 0, len);
}
// 关闭流并释放资源, 对于包装流,只需要关闭包装流本身,不需要专门关闭,包装流包装的底层流
in.close();
out.close();
}
}

浙公网安备 33010602011771号