BufferedInputStream和BufferedoutputStream是FilterInputStream和FilterOutputStream的子类,可以避免每次发送或者
写数据的时候,进行实际的写操作,使用的是缓冲区;
不应用缓冲区的时候,每次读取一个字节,写入一个字节,由于操作磁盘比内存慢的很多,所以不应用缓冲区效率很低;
应用缓冲区,可以一次读取多个字节,先不写入磁盘,而是放入内存之中,到了缓冲区大小的时候,在写入磁盘,减少了对磁盘的操作,效率高;
应用缓冲流,在结束的时候,调用flush和close方法,将缓冲区的数据都清理出来,,写入磁盘,否则可能无数据;
当写文件需要flush()的效果时,需要
FileOutputStream fos = new FileOutputStream(“c:\a.txt”);
BufferedOutputStream bos = new BufferedOutputStream(fos);
也就是说,需要将FileOutputStream作为BufferedOutputStream构造函数的参数传入,然后对BufferedOutputStream进行写入操作,才能利用缓冲及flush()。
1.BufferedOutputStream在close()时会自动flush
2.BufferedOutputStream在不调用close()的情况下,缓冲区不满,又需要把缓冲区的内容写入到文件或通过网络发送到别的机器时,才需要调用flush.
流的关闭顺序,后开先关
如果a依赖b,先关闭a
写数据的时候,进行实际的写操作,使用的是缓冲区;
不应用缓冲区的时候,每次读取一个字节,写入一个字节,由于操作磁盘比内存慢的很多,所以不应用缓冲区效率很低;
应用缓冲区,可以一次读取多个字节,先不写入磁盘,而是放入内存之中,到了缓冲区大小的时候,在写入磁盘,减少了对磁盘的操作,效率高;
应用缓冲流,在结束的时候,调用flush和close方法,将缓冲区的数据都清理出来,,写入磁盘,否则可能无数据;
当写文件需要flush()的效果时,需要
FileOutputStream fos = new FileOutputStream(“c:\a.txt”);
BufferedOutputStream bos = new BufferedOutputStream(fos);
也就是说,需要将FileOutputStream作为BufferedOutputStream构造函数的参数传入,然后对BufferedOutputStream进行写入操作,才能利用缓冲及flush()。
1.BufferedOutputStream在close()时会自动flush
2.BufferedOutputStream在不调用close()的情况下,缓冲区不满,又需要把缓冲区的内容写入到文件或通过网络发送到别的机器时,才需要调用flush.
流的关闭顺序,后开先关
如果a依赖b,先关闭a