标签:
我们上一篇文章讲了InputStream(输入流)。输入流里面有两种流:节点流和过滤流。我们这篇文章讲一下这个。
回顾什么是节点流:节点流就是直接和目标打交道的。
过滤流:就是直接和节点流打交道的。
InputStream的节点流和过滤如下所示:
解释一下上面这张图:对于InutStream来说有这么多的子类。其中FilterInputStream(他的子类DataInputStream,BufferedInputStream....都是过滤流)是过滤流,其他都是节点流。
我们再讲一下输出流(outputStream),我们看一下他的层次:
同样的FilterOutputStream(和他的子类DataOutStream,BuffereOutStream是过滤流)是过滤流。其他都是节点流、
下面两张图是对过滤流的补充:
我们讲一下OutPutStream中的BufferedOutputStream过滤流:
这个是用来缓冲的。他是过滤流不能直接和IO设备打交道,他是包装节点流的。就是说,这个类是内容从程序到文件中。不采用缓冲的话是我们每当有一个字节就要把这个字节输入到文件中,这样的话造成的后果是,我们会很频繁的与IO设备打交道,这样的效率是很低的。所以我们采用缓冲,只有当一定的数量了,比如50个字节了才与IO设备打交道,这样就避免了频繁与IO设备打交道,提高了效率。
我们看一下它的构造函数:
看到没,它里面的构造函数直接与OutPutStream打交道,不与什么File打交道了,说明他就是过滤流,起到包装的作用。
案例如下:
public class FileTest { public static void main(String[] args) throws IOException { /* * 有了缓存的功能又有了输出的功能 * */ OutputStream os=new FileOutputStream("1.txt"); BufferedOutputStream bufferedOutputStream=new BufferedOutputStream(os); bufferedOutputStream.write("aaaaaaaa".getBytes()); bufferedOutputStream.close(); } }
标签:
原文地址:http://www.cnblogs.com/shenxiaoquan/p/5739213.html