BufferedInputStream与BufferedOutputStream
BufferedInputStream内部开辟一个默认大小为8k的缓冲区
正常释放时,先释放内部的流,再释放外部的流。
但是BufferedInputStream的close方法默认先释放底层流,因此只写一个close即可。
image.png
从图中可以看出处理流使用装饰者模式,封装节点流对象,并对其进行扩展。
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class TestBuffer {
public static void main(String[] args) {
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream("1.jpg")); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("3.jpg"))) {
byte[] bytes = new byte[1024];
int len = -1;
while ((len = bis.read(bytes)) != -1) {
bos.write(bytes, 0, len);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
FileInputStream通过操作系统调用资源
而BufferedInputStream则是通过虚拟机管理,由虚拟机通知gc释放
网友评论