标签:
说明:对于InputStream还有几个不怎么能用到,或已经不推荐使用的流我没有放到图片中,除此,InputStream和OutputStream几乎完全对应,OutputStream中多了个PrintStream用于格式化打印。
因为这里完美对应,所以我只解释输入流和PrintWriter,最后会展示它们的使用代码。
(1)ByteArrayInputStream可以用于多线程的通信来提供缓冲功能(这里说缓冲是指它会维护一个内存中的Byte数组),所以它的"流源"就是内存中的数组,"流汇"当然是应用程序。
(2)FileInputStream建立一个与文件有关的输入流,用来读取文件数据。它的“流源”是硬盘上的一个文件,创建时通过File对象或者表示文件位置的URL来指明“流源”的位置。“流汇”是应用程序。
(3)PipedInputStream与PipedOutputStream配合使用,用于读入数据管道的数据。“流源”的物理位置依然是内存,通过PipedOutputStream来指明。“流汇”应用程序。
(4)ObjectInputStream将ObjectOutputStream串行化的数据并行化,并行化就是将二进制数据转化为Object类型数据,串行化就是将Object类型的数据转化为二进制数据。“流源”可以是内存,可以是网络,“流汇”是应用程序。
(5)FilterInputStream比较特殊,它的角色是设计模式中装饰模式中的装饰者,不熟悉设计模式的可以去看设计模式。它是一个抽象类,不能直接创建对象。它规范了实现它的子类(即BufferedInputStream和DataInputStream)如何对前面四种的流进行装饰,这里很重要的一点是FilterInputStream会强制子类调用被装饰对象的特定方法。这里的装饰,就是在加强被装饰对象的功能,也就是前四种流对象的功能。
(6)DataInputStream继承了FilterInputStream就是一个具体的装饰类,创建它时需要传入前四种流类型的对象,或者另外一个继承了FilterInputStream的BufferedInputStream可以将由前集中流获取的数据解释为java的八种基本类型的数据,例如int,char等。
(7)BufferedInputStream会在内存中创建一个缓冲区(所谓的缓冲区就是程序申请分配的一段内存地址,例如创建了一个数组,这个数组就可以充当一个内存缓冲区)将由前四种对象读取的数据进行缓存。
//临时有事,后面的内容将于晚上补全
标签:
原文地址:http://www.cnblogs.com/zhoutong/p/5369568.html