【J2SE快速进阶】——IO流简介
来源:互联网 发布:linux network 编辑:程序博客网 时间:2024/05/15 06:29
IO流的概念
IO流是从数据从一处流向另一处的抽象,就像水流从管道的一端流向另一端一样。在程序中,所有的数据都是以流的方式来传输和保存的。
JDK所提供的所有流类位于java.io包中,并且这些类都分别继承自以下四种抽象流类:InputStream、OutputStream、Reader和Writer。
说明:
InputStream:继承自InputStream的流都是用于向程序中输入数据的,且数据单位都是字节(8位)。
OutputStream:继承自OutputStream的流都是程序用于向外输出数据的,且数据单位都是字节(8位)。
Reader:继承自Reader的流都是用于向程序中输入数据的,且数据单位都是字符(16位)。
Writer:继承自Writer的流都是程序用于向外输出数据的,且数据单位都是字符(16位)。
IO流的分类
★ 按流向来分类,IO流的可以分为输入流和输出流。一般情况,数据的输入、输出都是从程序的角度来考虑的,所以输入流就是程序从文件读取数据,即数据由文件流向程序;输出流就是使数据由程序流向文件。
★ 按传输单位来分类,IO流可以分为字节流和字符流。顾名思义,字节流是以字节为基本单位来传输数据,字符流是以占用2个字节的Unicode字符为基本单位来传输数据。说到这里,顺便回忆一下基础知识:1Byte(字节)=8bit(位),因为Java中的字符采用Unicode编码,所以每个字符占两个字节,Java中各基本数据类型所占存储空间为:
类型占用存储空间char2 字节byte1 字节short2 字节int4 字节long8 字节float4 字节double8 字节字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串; 2. 字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。
当了解了按流向和传输单位这两种分类方式时,可以综合上文的那张思维导图来看:
Reader和InputStream都属于输入流,它们的子类负责从数据源读取数据;Writer和OutputStream都属于输出流,它们的子类负责将数据写入到指定的位置。
Reader和Writer都属于字符流,它们的子类都以字符为基本单位传输数据;InputStream和OutputStream都属于字节流,它们的子类都以字节为基本单位传输数据。
★ 还可以根据 IO流的功能来分类,分为节点流和处理流。节点流从或向一个特定的节点读写数据;处理流是对已经存在的一个流的连接和封装,可以看做是对已经存在的流的优化或过滤。
下面就展开思维导图,来看一下java中庞大的IO家族:
这里先是对java中IO机制有一个全局的了解,后面将对这四个抽象类及其子类进一步学习与总结。
- 【J2SE快速进阶】——IO流简介
- 【J2SE快速进阶】——IO流的四个基本抽象类InputStream、OutputStream、Reader、Writer
- 【J2SE快速进阶】——递归算法
- 【J2SE快速进阶】——Java内存分析
- 【J2SE快速进阶】——向上转型及其内存分析
- 【J2SE快速进阶】——数组(及其内存分析 )
- 【J2SE快速进阶】——Java多线程机制
- 【J2SE快速进阶】——多线程之synchronized
- J2SE快速进阶——Java多线程机制
- 【J2SE快速进阶】——Java中的equals和==的区别
- 【J2SE快速进阶】——Socket编程入门(TCP/UDP)
- J2SE第八章——IO输入输出流(总结)
- J2SE之IO流
- J2SE第八章——IO输入输出流(基本知识与IO流实现文件复制)
- J2SE基础摘要——java简介
- J2SE学习笔记—Java简介
- 【J2SE】——流
- 11、J2SE基础-IO流
- 本人博客在3月将搬家至www.stalvan.com
- 测试五境界
- ASP.NET MVC 部署 备忘
- 常用排序算法、时间复杂度、实现思路
- C++primer(第五版)9.2.5节,9.2.7节练习答案
- 【J2SE快速进阶】——IO流简介
- 调用系统相机 图库 截图功能。实现大图片裁剪保存
- Yii2中数据库关于GrooupBy操作的一个小知识点
- SSH框架搭建
- 用ThreadLocal解决多线程安全问题
- SSH之 spring框架配置文件
- linux下的常用命令
- 测试用例标准
- (377A)codeforce