Java IO

来源:互联网 发布:office办公室软件培训 编辑:程序博客网 时间:2024/06/11 00:35

最近在学习Java NIO,在了解NIO之前,感觉还是有必要先了解Java IO 。虽然目前的学习还只是停留在怎么使用的层面上,但是了解历史才能更好的运用知识。这一点在《Thinking in Java》中有同样的观点:很有必要了解I/O类库的演化过程,即使我们的第一反应是“不要用历史打扰我,只需告诉我怎么用。” 问题是,如果缺乏历史的眼光,很快我们就会对什么时候该使用哪些类,以及什么时候不该使用它们而感到困惑。



Java I/O中流是主体,其基本特点是一维且单向,下面看一下IO中的流都有哪些。(图片参考文章地址:http://blog.csdn.net/yczz/article/details/38761237)


输入流中:
1.InputStream是所有的输入字节流的父类,它是一个抽象类。
2. ByteArrayInputStream、StringBufferInputStream、FileInputStream是三种基本的介质流,它们分别将Byte数组、StringBuffer、和本地文件中读取数据。PipedInputStream是从与其它线程共用的管道中读取数据,与Piped相关的知识会用专门的一小节讲解。
3. ObjectInputStream和所有FilterInputStream的子类都是装饰流(装饰器模式的主角)。

输出流中:
1.OutputStream是所有的输出字节流的父类,它是一个抽象类。
2. ByteArrayOutputStream、FileOutputStream是两种基本的介质流,它们分别向Byte数组、和本地文件中写入数据。PipedOutputStream是向与其它线程共用的管道中写入数据。
3. ObjectOutputStream和所有FilterOutputStream的子类都是装饰流。

字节流中不太对称的几个类:
1. LineNumberInputStream主要完成从流中读取数据时,会得到相应的行号,至于什么时候分行、在哪里分行是由改类主动确定的,并不是在原始中有这样一个行号。在输出部分没有对应的部分,我们完全可以自己建立一个LineNumberOutputStream,在最初写入时会有一个基准的行号,以后每次遇到换行时会在下一行添加一个行号,看起来也是可以的。好像更不入流了。
2. PushbackInputStream的功能是查看最后一个字节,不满意就放入缓冲区。主要用在编译器的语法、词法分析部分。输出部分的BufferedOutputStream几乎实现相近的功能。
3.  StringBufferInputStream已经被Deprecated,本身就不应该出现在InputStream部分,主要因为String应该属于字符流的范围。已经被废弃了,当然输出部分也没有必要需要它了!还允许它存在只是为了保持版本的向下兼容而已。
4.  SequenceInputStream可以认为是一个工具类,将两个或者多个输入流当成一个输入流依次读取。完全可以从IO包中去除,还完全不影响IO包的结构,却让其更“纯洁”――纯洁的Decorator模式。
5.  PrintStream也可以认为是一个辅助工具。主要可以向其他输出流,或者FileInputStream写入数据,本身内部实现还是带缓冲的。本质上是对其它流的综合运用的一个工具而已。一样可以踢出IO包!System.out和System.out就是PrintStream的实例。


原创粉丝点击