java io-1基本概念
来源:互联网 发布:两少一宽 胡 知乎 编辑:程序博客网 时间:2024/05/18 12:41
Java IO
一、 历史背景
二、IO的分类
三、IO中的流
四、字节流
4.1 IO中的输入字节流
1.InputStream是所有的输入字节流的父类,它是一个抽象类。
2. ByteArrayInputStream、StringBufferInputStream、FileInputStream是三种基本的介质流,它们分别将Byte数组、StringBuffer、和本地文件中读取数据。PipedInputStream是从与其它线程共用的管道中读取数据,与Piped相关的知识会用专门的一小节讲解。
3. ObjectInputStream和所有FilterInputStream的子类都是装饰流(装饰器模式的主角)。下表列出了这些流的功能及如何使用它们(具体使用在讲解完装饰器模式后会举几个例子)。
4.2 IO中的输出字节流
- OutputStream
- ByteArrayOutputStream
- FileOutputStream
- FilterOutputStream
- BufferedOutputStream
- DataOutputStream
- PrintStream
- ObjectOutputStream
- PipedOutputStream
4.3 字节流的输入与输出的对应
五、字符流
5.1 字节流与字符流
从上面我们可以看出IO中的字节流是极其复杂的,存在大量的类,到目前为止还没有真正使用它们,使用它们应该也是极其复杂的吧!JDK1.1后Sun对IO库进行了重大的改进。看到Reader和Writer类时,大多数人的第一个感觉(不要太相信感觉哦!感觉也许会欺骗你的!)就是它们是用来替换原来的InputStream和OutputStream类。有新的类,干吗还使用旧的呢!?但实情并非如此。尽管Sun不建议使用原始的流库中的某些功能,但原来的流依然得到了保留,不仅为了保持向后兼容,主要原因是新库不是旧库的替代,而是对旧库的增强。从以下两点可以明显地看出:
(1) 在老式的类层次结构里加入了新的类,这表明 Sun公司没有放弃老式流库的意图。
(2) 在许多情况下,新库中类的使用需要联合老结构中的类。为达到这个目的,需要使用一些“桥”类,如:InputStreamReader将一个InputStream转换成Reader;OutputStreamWriter将一个OutputStream转换成Writer。
那么Sun为什么在Java 1.1里添加了Reader和Writer层次,最重要的原因便是国际化(Internationalization――i18n)的需求。老式IO流层次结构只支持8位字节流,不能很好地控制16位的Unicode字符。Java本身支持Unicode,Sun又一致吹嘘其支持Unicode,因此有必要实现一个支持Unicode的流的层次结构,所以出现了Reader和Writer层次,以提供对所有IO操作中的Unicode的支持。除此之外,新库也对速度进行了优化,可比旧库更快地运行。
8位的字节流和16位的字符流的对应关系,可以从ByteInputStream/ByteOutputStream与CharArrayInputStream/CharArrayOutputStream的对应关系中看出端倪。(还没看出来啊!赶紧去看看Java的基本数据类型)。
因此在Java的IO体系中存在字节流和字符流的对应关系。下面就看看字符流吧!
5.2 IO中的输入字符流
下面是IO中输入字符流的继承图
Reader
----BufferedReader
----------LineNumberReader
----CharArrayReader
----FilterReader
----------PushbackReader
----InputStreamReader
----------FileReader
----PipedReader
----StringReader
在上面的关系图中可以看出:1.Reader是所有的输入字符流的父类,它是一个抽象类。2.CharReader、StringReader是两种基本的介质流,它们分别将Char数组、String中读取数据。PipedReader是从与其它线程共用的管道中读取数据。3. BufferedReader很明显就是一个装饰器,它和其子类负责装饰其它Reader对象。4.FilterReader是所有自定义具体装饰流的父类,其子类PushbackReader对Reader对象进行装饰,会增加一个行号。5.InputStreamReader是一个连接字节流和字符流的桥梁,它将字节流转变为字符流。FileReader可以说是一个达到此功能、常用的工具类,在其源代码中明显使用了将FileInputStream转变为Reader的方法。我们可以从这个类中得到一定的技巧。
Reader中各个类的用途和使用方法基本和InputStream中的类使用一致。后面会有Reader与InputStream的对应关系。
5.3 IO中的输出字符流
下面是IO中输出字符流的继承图。
Writer-----BufferedWriter
-----CharArrayWriter
-------------FilterWriter
-----OutputStreamWriter
-----FileWriter
-----PipedWriter
-----PrintWriter
-----StringWriter
在上面的关系图中可以看出:1.Writer是所有的输出字符流的父类,它是一个抽象类。2. CharArrayWriter、StringWriter是两种基本的介质流,它们分别向Char数组、String中写入数据。PipedWriter是向与其它线程共用的管道中写入数据, 3. BufferedWriter是一个装饰器为Writer提供缓冲功能。4.PrintWriter和PrintStream极其类似,功能和使用也非常相似。5.OutputStreamWriter是OutputStream到Writer转换的桥梁,它的子类FileWriter其实就是一个实现此功能的具体类(具体可以研究一下Source Code)。功能和使用和OutputStream极其类似,后面会有它们的对应图。
5.4 字符流的输入与输出的对应
下图为字符流的输入与输出的对应关系图:
六、字节流和字符流的对应
Java的IO中存在输入、输出的对应和字节流和字符流的对应,下面就看看字节流和字符流的对应吧!6.1 输入的对应
下图是IO中字节输入流与字符输入流的对应图:6.2 输出的对应
- java io-1基本概念
- java Io流基本概念
- java-IO-基本概念
- Java IO流的基本概念
- java学习笔记(7)基本概念之IO
- Java输入输出(IO)和流的基本概念
- Java输入输出(IO)和流的基本概念
- Java输入输出(IO)和流的基本概念
- IO基本概念
- java入门教程-8.1Java输入输出(IO)和流的基本概念
- Java中输入输出(IO)和流的基本概念
- 笔记1:java基本概念
- IO流基本概念
- Java学习(1) java基本概念
- java基本概念
- Java基本概念
- java基本概念
- Java 基本概念
- 初始MINA框架
- 黑马程序员-java基础-集合
- Android 开发 之 Fragment 详解
- Compare Version Numbers
- OpenCV之五 分离颜色通道&多通道图像混合
- java io-1基本概念
- java 项目 路径获取
- Winodws x64系统服务调用的那头4个参数
- 背景音乐功能
- [Mark Unity]MonoBehavior里面基本函数调用
- android添加背景音乐
- Android酷炫实用的开源框架(UI框架)
- 背景音乐功能
- 引用WCF热门问题编程示例(2)多个实例调用一个WCF服务