<div style="font-size:16px;">
<p>深入理解Java中的IO</p>
<p>转载自:http://blog.csdn.net/qq_25184739/article/details/51205186</p>
<p>本文的目录视图如下:</p>
<p>Java IO概要</p>
<p>a.Java IO中常用的类</p>
<p>b.Java流类的类结构图</p>
<p>1.流的概念和作用</p>
<p>2.Java IO所采用的模型 :</p>
<p>3.IO流的分类</p>
<p>4.Java IO流对象</p>
<p>1.输入字节流InputStream</p>
<p>2.输出字节流OutputStream</p>
<p>3.字符输入流Reader</p>
<p>4.字符输出流Writer</p>
<p>5.字符流的输入与输出的对应</p>
<p>6.字符流与字节流转换</p>
<p>7.字节流和字符流的区别</p>
<p>8.File类</p>
<p>9.RandomAccessFile类</p>
<p>Java IO概要</p>
<p>为了方便理解与阐述,先引入两张图:</p>
<p>a、Java IO中常用的类</p>
<p align="center"><img alt="957654c1afb5de2b3eee96b0abac40d9.png" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-179e4ca6d7c29a0b35ab29f2ce7d4895.png"></p>
<p>在整个Java.io包中最重要的就是5个类和一个接口。5个类指的是File、OutputStream、InputStream、Writer、Reader;一个接口指的是Serializable.掌握了这些IO的核心操作那么对于Java中的IO体系也就有了一个初步的认识了</p>
<p>Java I/O主要包括如下几个层次,包含三个部分:</p>
<p>1.流式部分――IO的主体部分;</p>
<p>2.非流式部分――主要包含一些辅助流式部分的类,如:File类、RandomAccessFile类和FileDescriptor等类;</p>
<p>3.其他类--文件读取部分的与安全相关的类,如:SerializablePermission类,以及与本地操作系统相关的文件系统的类,如:FileSystem类和Win32FileSystem类和WinNTFileSystem类。</p>
<p>主要的类如下:</p>
<p>1. File(文件特征与管理):用于文件或者目录的描述信息,例如生成新目录,修改文件名,删除文件,判断文件所在路径等。</p>
<p>2. InputStream(二进制格式操作):抽象类,基于字节的输入操作,是所有输入流的父类。定义了所有输入流都具有的共同特征。</p>
<p>3. OutputStream(二进制格式操作):抽象类。基于字节的输出操作。是所有输出流的父类。定义了所有输出流都具有的共同特征。</p>
<p>4.Reader(文件格式操作):抽象类,基于字符的输入操作。</p>
<p>5. Writer(文件格式操作):抽象类,基于字符的输出操作。</p>
<p>6. RandomAccessFile(随机文件操作):一个独立的类,直接继承至Object.它的功能丰富,可以从文件的任意位置进行存取(输入输出)操作。</p>
<p>Java中IO流的体系结构如图:</p>
<p align="center"><img alt="8cfc523384017fc48cf548a82a41b7cb.png" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-23c74583854eb165b3e3445bb52d7475.png"></p>
<p>b、Java流类的类结构图:</p>
<p align="center"><img alt="0f38650b9741e9414c43d21e92d842f4.png" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-02da4566c305fb5249748c134f27c778.png"></p>
<p>1、流的概念和作用</p>
<p>流:代表任何有能力产出数据的数据源对象或者是有能力接受数据的接收端对象</p>
<p>流的本质:数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。</p>
<p>流的作用:为数据源和目的地建立一个输送通道。</p>
<p>Java中将输入输出抽象称为流,就好像水管,将两个容器连接起来。流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流.</p>
<p>2、Java IO所采用的模型</p>
<p>Java的IO模型设计非常优秀,它使用Decorator(装饰者)模式,按功能划分Stream,您可以动态装配这些Stream,以便获得您需要的功能。</p>
<p>例如,您需要一个具有缓冲的文件输入流,则应当组合使用FileInputStream和BufferedInputStream。</p>
<p>3、IO流的分类</p>
<p>· 根据处理数据类型的不同分为:字符流和字节流</p>
<p>· 根据数据流向不同分为:输入流和输出流</p>
<p>· 按数据来源(去向)分类:</p>
<p>1、File(文件): FileInputStream, FileOutputStream, FileReader, FileWriter</p>
<p>2、byte[]:ByteArrayInputStream, ByteArrayOutputStream</p>
<p>3、Char[]: CharArrayReader,CharArrayWriter</p>
<p>4、String:StringBufferInputStream, StringReader, StringWriter</p>
<p>5、网络数据流:InputStream,OutputStream, Reader, Writer</p>
<p>字符流和字节流</p>
<p>流序列中的数据既可以是未经加工的原始二进制数据,也可以是经一定编码处理后符合某种格式规定的特定数据。因此Java中的流分为两种:</p>
<p>1) 字节流:数据流中最小的数据单元是字节</p>
<p>2) 字符流:数据流中最小的数据单元是字符, Java中的字符是Unicode编码,一个字符占用两个字节。</p>
<p>字符流的由来 |
|