码迷,mamicode.com
首页 > 编程语言 > 详细

Java I/O

时间:2016-04-08 19:51:42      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:

简介:java通过输入和输出流来进行数据传输,这里的“流”,应该说是“流处理器”更为恰当,它是一个类,封装了对数据的操作细节。使得我们可以方便的进行数据传输。在这里有个“流源”和“流汇”的概念。数据就是从“流源”传至“流汇”,对于输入流,“流源”可以是磁盘,网络,内存等等,“流汇”是我们的程序。对于输出流,“流源”是我们的程序,“流汇”是磁盘,网络,内存等等。java的InputStream和OutputStream对应,byte和char对应。byte类型的数据是InputStream和OutputStream操作的数据。char类型的数据是Reader和Writer操作的数据(Reader和Writer是为了支持国际化),应当尽可能去用Reader和Writer当这两个流处理器不能满足需求时才用InputStream和OutputStream(例如视频文件的处理)。

UML类图:

技术分享

 

说明:对于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会在内存中创建一个缓冲区(所谓的缓冲区就是程序申请分配的一段内存地址,例如创建了一个数组,这个数组就可以充当一个内存缓冲区)将由前四种对象读取的数据进行缓存。

//临时有事,后面的内容将于晚上补全

 

Java I/O

标签:

原文地址:http://www.cnblogs.com/zhoutong/p/5369568.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!