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 控制。
使用需要套接
三、共同点——套接
观察以上所有处理流的类构造方法中都需要参数,这个参数是做什么用的呢?——套接。通过传递的参数和要作用的对象产生关联。
处理流的使用都需要套接。套接谁?为什么要套接?
这个不难理解,因为处理流的特性就是要对字节流进行处理加工,所以处理流声明过程中,肯定要指定它要“服务”的对象。所以套接的就是字节流,具体是如下四种抽象类型:
最终还是回归到了原点,不论怎么处理,最终我们都还是对这基本四种的“流”进行变形,达到我们期望的输入输出。
程序中对于数据的输入和输出操作以“流”方式进行,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的字节流和字符流的区别和用法
- tomcat链接mysql时超时报错java.io.EOFException: Can not read response from server. Expected to read 4 bytes,
- Java文件IO学习笔记(五)-删除文件夹和文件
- javaIO中从IO流类中简单的组合方案
- java-(IO)过滤流与包装类
- Java IO速度和占用内存的极致优化方法,模板方法【从hdu 2602 说起】
- public class 实体类名 implements java.io.Serializable{...}
- 对java io操作的再理解
- java io系列05之 ObjectInputStream 和 ObjectOutputStream
- java 使用ImageIO.writer从BufferedImage生成jpeg图像遇到问题总结及解决
- JAVA基础——IO操作规律
- Tomcat:IOException while loading persisted sessions: java.io.EOFException异常处理
- java IO操作
- java IO
- Java IO的RandomAccessFile的使用
- java.io.FileNotFoundException class path resource [xxx.xml] cannot be opened
- java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
- java io系列01之 "目录"
- Java之IO(五)文件系统
- JAVA IO - Delete file