java io流
2016-04-12 14:25
375 查看
我们先来看看类图:
图1
参考自http://www.cnblogs.com/zhuYears/archive/2013/04/10/2993292.html
流的概念比较抽象,可以想象一下水流的样子。
io在本质上是单个字节的移动,而流可以说是字节移动的载体和方式,它不停的向目标处移动数据,我们需要做的就是根据流的方向从流中读取数据或者向流中写入数据。
最简单的例子就是下载电影,肯定不是等电影全部下载在内存中在保存到磁盘上,本质上时下载一个字节就保存一个字节。
一个流,必定有源头和目标,可以是计算机内存中的某些区域,也可以是磁盘文件等。
流可以分为节点流和处理流。
根据流向分为输入流和输出流。
根据传输单位分为字节流字符流。
io分类:
java中分为两类:基于字节的和基于字符的:(抽象类)inputStream,outputstream;writer,reader
不管是网络还是磁盘传输,最小的存储单位都是字节。但是程序中操作的数据大多都是字符形式的,所以,java也提供字符处理流。还有一点:数据的传输方式,就是数据写到哪里的问题,主要是以下两种:
1. 每个字符流子类几乎都会有一个相对应的字节流子类,两者功能一样,差别只是在于操作的是字节还是字符。例如CharArrayReader和ByteArrayInputStream,两者都是在内存中建立数组缓冲区作为输入流,不同的只是前者数组用来存放字符,每次从数组中读取一个字符;后者则是针对字节。
图1
参考自http://www.cnblogs.com/zhuYears/archive/2013/04/10/2993292.html
流的概念比较抽象,可以想象一下水流的样子。
io在本质上是单个字节的移动,而流可以说是字节移动的载体和方式,它不停的向目标处移动数据,我们需要做的就是根据流的方向从流中读取数据或者向流中写入数据。
最简单的例子就是下载电影,肯定不是等电影全部下载在内存中在保存到磁盘上,本质上时下载一个字节就保存一个字节。
一个流,必定有源头和目标,可以是计算机内存中的某些区域,也可以是磁盘文件等。
流可以分为节点流和处理流。
根据流向分为输入流和输出流。
根据传输单位分为字节流字符流。
io分类:
java中分为两类:基于字节的和基于字符的:(抽象类)inputStream,outputstream;writer,reader
不管是网络还是磁盘传输,最小的存储单位都是字节。但是程序中操作的数据大多都是字符形式的,所以,java也提供字符处理流。还有一点:数据的传输方式,就是数据写到哪里的问题,主要是以下两种:
1. 每个字符流子类几乎都会有一个相对应的字节流子类,两者功能一样,差别只是在于操作的是字节还是字符。例如CharArrayReader和ByteArrayInputStream,两者都是在内存中建立数组缓冲区作为输入流,不同的只是前者数组用来存放字符,每次从数组中读取一个字符;后者则是针对字节。
ByteArrayInputStream、CharArrayReader | 为多线程的通信提供缓冲区操作功能。常用于读取网络中的定长数据包 |
ByteArrayOutputStream、CharArrayWriter | 为多线程的通信提供缓冲区操作功能。常用于接收足够长度的数据后进行一次性写入 |
FileInputStream、FileReader | 把文件写入内存作为输入流,实现对文件的读取操作 |
FileOutputStream、FileWriter | 把内存中的数据作为输出流写入文件,实现对文件的写操作 |
StringReader | 读取String的内容作为输入流 |
StringWriter | 将数据写入一个String |
SequenceInputStream | 将多个输入流中的数据合并为一个数据流 |
PipedInputStream、PipedReader、PipedOutputStream、PipedWriter | 管道流,主要用于2个线程之间传递数据 |
ObjectInputStream | 读取对象数据作为输入流,对象中的 transient 和 static 类型的成员变量不会被读取或写入 |
ObjectOutputStream | 将数据写入对象 |
FilterInputStream、FilterOutputStream、FilterReader、FilterWriter | 过滤流通常源和目标是其他的输入输出流,大家可以看到有众多的子类,各有用途,就不一一介绍了 |
相关文章推荐
- jpa整合spring和springData出错: Unable to build Hibernate SessionFactory
- Java 中的简单分割
- Java深度历险(五)——Java泛型
- 深入Java集合学习系列:HashMap的实现原理
- DOM4J 写入 XML 文件
- Java多线程--主线程等待所有子线程执行完毕
- 权限管理框架实现(1)--Struts切面处理
- MyEclipse自动生成注释,修改注释模板
- 学习札记:JVM的内存布局
- eclipse怎么设置字体大小
- Spring事务的5种模式
- java struts2自定义调用方法
- java基本常识小结
- java中判断字符串是否为数字的三种方法
- 使用 XStream 实现 Java 对象与 XML 的相互转换
- 在eclipse中图形化添加maven项目jar包
- spring 注解
- java内部类详解
- spring 读取properties文件
- Java 8 新特性:Lambda 表达式的作用域(Lambda 表达式补充版)