jave.io框架

2010-11-10 22:18:34|  分类: 默认分类|举报|字号 订阅

 
 

可从IO的类层次,IO框架的设计模式来论述。

总体来说,IO可以分为字节流和字符流,不同在于字符流由字节流包装而来,在IO读入之后经过JVM处理,把字节流转换成字符流。而字符流的字符采用哪种字符编码实现由JVM默认编码决定。
而每个流都分输入和输出,所以,总体来说,IO有四个顶层类: 
InputStream 
OutputStream 
Reader 
Writer

而作为机器级别于机器直接交互的则是字节流: 
InputStream 
OutputStream

以IO的中间类,进行字节流到字符流的转换过渡,通常可作为字符流类的构造参数,可指定编码:
InputStreamReader 
OutputStreamWriter

而字节流和字符流的缓冲容器来看有byte和char之分,所以派生出: 
ByteArrayInputStream 
ByteArrayOutputStream 
CharArrayInputStream 
CharArrayOutputStream

以上类只是表示流的表示形式,而在传输形式上还表现为是否有缓冲。所以,可以派生出子类为可缓冲类: 
BufferInputStream 
BufferOutputStream 
BufferReader 
BufferWriter

每一个顶层类都有对目录文件(File)的支持: 
FileInputStream 
FileOutputStream 
FileReader 
FileWriter

在Java中,一个强大的功能就是可以对对象进行序列化,转成二进制文件输出,也就是字节流输出而不是字符流输出,所以有顶层的InputStream和OutputStream派生类: 
ObjectInputStream 
ObjectOutputStream

流包括了节点流和过滤流,注意的是过滤流,可在读写的同时对数据进行操作,并且实现了同步操作,顶层过滤流类: 
FilterInputStream 
FilterOutputStream 
其子类则在其基础上,对节点流进行封装,常见子类有: 
BufferInputStream          BufferOutputStream 
DataInputStream            DataOutputStream 
LineNumberInputStream      PrintStream 
可参考子类的构造方法。

以上IO操作几乎就是把流装载到内存中,对其进行操作的时候是顺序读写,而需要随机读写时: 
RandomAccessFile

从整个类框架的结构实现的接口来看,顶层类: 
InputStream implements Closable, 
OutputStream implements Closable, Flushable 
Reader implements Closable, Readable 
Writer implements Closable, Flushable, Appendable 
各个接口方法: 
Closable: close(); 
Flushable: flush(); 
Readable: read(CharBuffer cb); 
Appendable: append(); 
从IO类使用时的规则来看,实现这些方法就是很自然的了,也是必须要实现的。如:流使用完必须关闭,流输出前必须刷新。

注意的是,这四个顶层类都没有实现Serializable接口。 
java.io.Serializable虽然属于IO框架,但其并不是直接作用于IO框架四个顶层IO类及其子类,而是作用于其它对象,使其可被序列化,再通过IO类对其进行输入输出。如:File、ObjectStreamClass、String。

Java IO 框架中主要应用了两个设计模式:装饰模式和适配器模式。

姑且就把Java IO划分为元素和行为两个部分,元素则是适配,行为则是装饰加强。

适配器模式主要在于字节流到字符流的转换和元素的包装上,如类:InputStreamReader, CharArrayReader, FileReader, PipedReader, StringReader。 
装饰模式主要在对流的强化之中,如缓冲、过滤、行定位等,如类:BufferedReader, FilterReader, LineNumberReader。

一个典型的例子就是: 
BufferReader br = new BufferReader(new InputStreamReader(System.in)); 
综合了两种模式:把InputStream适配成InputStreamReader,再把InputStreamReader加强装饰城BufferedReader。

java IO框架分析的更多相关文章

  1. java IO 实例分析

    初学java,一直搞不懂java里面的io关系,在网上找了很多大多都是给个结构图草草描述也看的不是很懂.而且没有结合到java7 的最新技术,所以自己来整理一下,有错的话请指正,也希望大家提出宝贵意见 ...

  2. java io性能分析

    摘要: 本文大多技术围绕调整磁盘文件 I/O,但是有些内容也同样适合网络 I/O 和窗口输出. 第一部分技术讨论底层的I/O问题,然后讨论诸如压缩,格式化和串行化等高级I/O问题.然而这个讨论没有包含 ...

  3. Java IO流分析整理 .

    Java中的流,可以从不同的角度进行分类. 按照数据流的方向不同可以分为:输入流和输出流. 按照处理数据单位不同可以分为:字节流和字符流. 按照实现功能不同可以分为:节点流和处理流. 输出流: 输入流 ...

  4. java IO 框架图

  5. java io系列01之 "目录"

    java io 系列目录如下: 01. java io系列01之  "目录" 02. java io系列02之 ByteArrayInputStream的简介,源码分析和示例(包括 ...

  6. JAVA IO 序列化与设计模式

    ➠更多技术干货请戳:听云博客 序列化 什么是序列化 序列化:保存对象的状态 反序列化:读取保存对象的状态 序列化和序列化是Java提供的一种保存恢复对象状态的机制 序列化有什么用 将数据保存到文件或数 ...

  7. java fork-join框架应用和分析

    http://shmilyaw-hotmail-com.iteye.com/blog/1897636 java fork-join框架应用和分析 博客分类: concurrency multithre ...

  8. java io系列02之 ByteArrayInputStream的简介,源码分析和示例(包括InputStream)

    我们以ByteArrayInputStream,拉开对字节类型的“输入流”的学习序幕.本章,我们会先对ByteArrayInputStream进行介绍,然后深入了解一下它的源码,最后通过示例来掌握它的 ...

  9. java io系列03之 ByteArrayOutputStream的简介,源码分析和示例(包括OutputStream)

    前面学习ByteArrayInputStream,了解了“输入流”.接下来,我们学习与ByteArrayInputStream相对应的输出流,即ByteArrayOutputStream.本章,我们会 ...

随机推荐

  1. 使用memcachedclientXmemcached与Spring整合

    1 简单介绍 Xmemcached是一个高性能的基于java nio的memcachedclient.在经过三个RC版本号后.正式公布1.10-final版本号. xmemcached特性一览: 1. ...

  2. OC3大回调模式使用总结(三)block回调

    OC 3大回调模式使用总结(三)block回调 block 又称 代码块,闭包等 是一个匿名的函数,它能够当做一个对象来使用,仅仅只是这个对象非常特殊,是一段代码,他能够保存你写的一段预备性质代码,待 ...

  3. 学习笔记——WCF

    学了一下WCF,发现怎么跟Web Service这么像! 这个WCF究竟干嘛的? 一查,原来: "Windows Communication Foundation (WCF) 是由微软发展的 ...

  4. HDU 4099 Revenge of Fibonacci Trie+高精度

    Revenge of Fibonacci Problem Description The well-known Fibonacci sequence is defined as following: ...

  5. Winform 异步调用

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  6. [转]rdlc报表中表达式的使用--switch和IIF范例

    本文转自:http://hi.baidu.com/oypx1234/item/5b35dec4e03a3ad697445266 =Switch( Fields!MLWHLO.Value = " ...

  7. python实践

    https://www.cnblogs.com/smallSevens/p/10016045.html --二手房交易记录 https://www.cnblogs.com/xiangyuecn/p/1 ...

  8. POJ 2342 Anniversiry Party(TYVJ1052 没有上司的舞会)

    题意: P1052 没有上司的舞会 描述 Ural大学有N个职员,编号为1~N.他们有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.每个职员有一个快乐指数.现在有个周 ...

  9. 画板(适用于手机、PC端)

    Html代码 <script type="text/javascript" src="jquery-1.9.1.min.js"></scrip ...

  10. vue vuex初学基础 常见错误解决方式

    前端界面使用篇 vue生命周期初始化事件 http://www.cnblogs.com/lily1010/p/5830946.html 常见错误篇 1 Newline required at end ...