您的位置:首页 > 编程语言 > Java开发

JAVA中的IO 流们

2014-03-30 17:56 211 查看
         Java
程序中对于数据的输入和输出操作以“流”方式进行,J2SDK提供了各种各样的“流”类,用于获取不同种类的数据;程序通过标准的方法输入和输出数据。

         java.io包中定义了多个流类型来实现输入、输出功能;从如下角度进行分类:
   数据流的方向:输入流和输出流
处理数据单位:字节流和字符流(一个字符包含两个字节)
功能:节点流和处理流
节点流:从一个特定的“数据源(节点)”读取数据
处理流:连接在已经“存在的流”上进行数据读取。
   不管有多少“流”类,最终java.io中类都继承如下四种抽象流类型:
   



  

让我们来根据功能看一下javaIO 中的流

    

一、节点流

节点:数据源。通俗的理解节点流:对数据的处理是从数据源点开始进行的就属于节点流。
内容类如下
图:
   


  

从上表可以看出:
1、节点类型,四种:File,Memory Array,Memory
String ,Pipe。
2、字符流的方法都是:Reader/Writer;字节流则为:input/output。
二、处理流 

  

1、处理流概览
处理流:是对节点流进行“处理”的一些类,不直接跟“数据源点”交互,通过节点流来达到我们需要的输入输出数据。这就是处理流的意义所在。看如下图就是处理流的内容类。



上表
特点:
1、操作对象:buffering(缓冲),filtering(过滤),Converting
(转换),object(对象),Data Conversion,Printing(打印),Counting(计数),Peekingahead
(预读)
2、字符流的方法都是:Reader/Writer;字节流则为:input/output。(同节点流) 

二、分类
通过上表处理流的不同操作对象,接下来介绍几种主要的处理流类型类型。 

1、缓冲流——buffering

套接在相应的节点流之上,对读写的数据提供了缓冲功能,可以提高读取效率,同时还可以增加一些新方法。
四个类构造如下:



2、转换流——Converting

A:上表查出转换流有两种:InputStreamReader和OutputStreamWriter
两种。
B:转换流在构造时可以指定其编码集合,如:inputStream isr = new InputStreamReader(System.in,"ISO8859_1");

使用需要套接。 

3、数据流——Data
Conversion

可以一次性写入一个“数据”,不然,是一个字节一个字节读取,不知道写进去,或者读出来的是什么:都是以字节读,写。例如:写入:12132434,可能读出来是
1 21 3 2 4 3 4 ,这样就模糊了。

类:DataInputStream
,DataOutputStream (继承自InputStream
和OutputStream)
构造:DataInputStream(InputStream in)
 DataOutputStream(OutputStream out) 

特点:提供了可以存取与机器无关的java原始类型数据(int,double)方法。
使用需要套接 

4、Print流

这个处理流是我们最常见的输出流。
 类:PrintWriter(字符)、PrintStream
(字节)。
构造如下:



特点如下:
都提供了重载的print方法,println
方法用于多种数据类型的输出。
不会抛出异常,用户通过检测错误状态获取错误信息。
有自动的Flush功能。
使用需要套接 

5、Object
流——直接将object
写入或者读出。 

类:ObjectInputStream
,ObjectOutputStream

重点如下:
Transient
:修饰的成员变量在编译的时候不被考虑。输出的时候是看不到的值(会显示0)
Serializable
:Serializable是标记性接口。接口内没有方法。
Externalizable:外部化接口,继承来自serializable
接口,自己控制自己的序列化过程。一般不使用。如果不使用这个接口,那么直接实现serializable
接口,由JDK 控制。
使用需要套接 

三、共同点——套接 

观察以上所有处理流的类构造方法中都需要参数,这个参数是做什么用的呢?——套接。通过传递的参数和要作用的对象产生关联。
处理流的使用都需要套接。套接谁?为什么要套接?
这个不难理解,因为处理流的特性就是要对字节流进行处理加工,所以处理流声明过程中,肯定要指定它要“服务”的对象。所以套接的就是字节流,具体是如下四种抽象类型:



最终还是回归到了原点,不论怎么处理,最终我们都还是对这基本四种的“流”进行变形,达到我们期望的输入输出。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java io 输入流 输出流 jdk