J2SE快速进阶——IO流

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中各基本数据类型所占存储空间为:

类型 占用存储空间
char 2 字节
byte 1 字节
short 2 字节
int 4 字节
long 8 字节
float 4 字节
double 8 字节

字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串; 2. 字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。

当了解了按流向传输单位这两种分类方式时,可以综合上文的那张思维导图来看:

Reader和InputStream都属于输入流,它们的子类负责从数据源读取数据;Writer和OutputStream都属于输出流,它们的子类负责将数据写入到指定的位置。

Reader和Writer都属于字符流,它们的子类都以字符为基本单位传输数据;InputStream和OutputStream都属于字节流,它们的子类都以字节为基本单位传输数据。

★ 还可以根据 IO流的功能来分类,分为节点流处理流。节点流从或向一个特定的节点读写数据;处理流是对已经存在的一个流的连接和封装,可以看做是对已经存在的流的优化或过滤。

下面来看一下java中庞大的IO家族:

这里先是对java中IO机制有一个全局的了解,后面将对这四个抽象类及其子类进一步学习与总结。

时间: 2024-10-03 21:53:34

J2SE快速进阶——IO流的相关文章

J2SE快速进阶——IO流的四个基本抽象类InputStream、OutputStream、Reader、Writer

上文中对java.io包中的四个抽象类及其关系简单了解了一下,这里进一步对它们及其子类进一步总结一下. 在上篇博客末尾,贴出了Java中的整个IO家族,之后小编又重修改了一下,在之前的基础上,标识出了节点流与处理流(绿色为节点流,黄色为处理流). 这里我们分别来说一下这四个抽象类. 细心的你也许会发现,大部分输入流和输出流都是成对的,有输入就有输出,一一对应. InputStream 输入字节流InputStream的作用是标志那些从不同数据起源产生输入的类. 基本方法有: int read()

JAVA进阶-IO流(1)

http://download.csdn.net/detail/qq285016127/7963747 Java对文件的操作API一般分为字节流 字符流 其为文件的读写API框架也是通过这个思想去扩展的.另外,在流的流向中也分为源流和宿流.如图(流的主体是根据流向决定,如输入InputStream/输出流OutPutStream) <1>从整个框架上看,io流的主要知识点分为: 1.字节流(输入FileInputStream/输出FileOutputStream) 1)字节流的构造一般都会通过

JAVA进阶-IO流(2)

<2>以下介绍一些7.0中比较高级的io流. 5.DirectoryStream根据给定路径列举当前文件 1)Files.newDirectoryStream(path,".*");第2个参数指定搜索的文件格式 /** * 列举目录/文件 * * @author Lean @date:2014-9-22 */ public class DirListing { public static void main(String[] args) { listDir("E:

java进阶 ------ IO流

[本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020] 流的概念和基本分类: 流的概念: 流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据的源的流,这个数据源可以是文件,内存,或是网络连接.类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流.这时候你就可以想象数据好像在这其中"流动一样". 流的分类: 按数据方向分:输入流和输出流 输入流:InputStream/Reader 输出流:Ou

J2SE基础:12.IO流编程

继承体系: 1:字节流 以stream结尾的都是字节流.字节流用于读取二进制数据. 2:字符流 结尾都是以reader/writer结尾的. Write append(char c) :写入字符 write(char[] cbuf) write(String str) write(int c) flush() close() FileWrite(); 用于操作文件. BufferWriter(); 带缓冲的套接流 newLine() :输入一个换行符. Reader FileReader Buf

J2SE快速进阶——Socket编程入门(TCP/UDP)

作品展时,我们的作品 "超级飞聊" 的主打功能就是聊天,包括局域网聊天.外网聊天等,虽然那时是用VB实现的(winsock控件),不过每种编程中的思想还是大同小异的,所以学习Java中的Socket编程时,倍感亲切啊. 概念了解 Socket又称"套接字",用来向网络中的主机发出请求或者应答网络中发出的请求. 文章开头先来简单了解一下TCP与UDP这两个协议: TCP TCP(Transmission Control Protocol传输控制协议)是一种面向连接的.

J2SE快速进阶——向上转型及其内存分析

还记得刚通过C#学习面向对象时,接触了对象转型,最近学习Java,又遇到了.这里再用Java分析一下对象的转型,并适当利用内存分析来加深理解. 向上转型 我们都知道,狗是动物中的一种,那么如果现在有一个Dog类和Animal类,那么他们的关系就是Dog类继承Animal类. 我们经常说,狗是动物,实际上"狗是动物"这句话就是向上转型的一个例子,即把狗(子类)当做动物(父类)来看待.用一句话来总结,向上转型就是父类的引用指向子类的实例. 实例说明&&内存分析 下面就用一个

J2SE快速进阶——Java内存分析

程序的执行过程 要在Java中分析内存,我们先来了解一下程序的执行过程: 正如上图所示,大致分为3个步骤: 1.最开始,我们的程序是存在于硬盘中的,当启动运行时,程序会被加载(load)到内存中去,这里的内存可以看做我们的内存条: 2.此时,内存中除了存在刚加载的程序的代码,还存在操作系统本身的代码(好吧,此句可以当做废话→_→),操作系统会找到程序中的Main方法开始执行程序: 3.第三步就是本文的重点,系统在程序执行过程中对内存的管理.在Java中,内存大致会被分为四块--heap(栈).s

J2SE快速进阶——数组(及其内存分析 )

早在学习其他语言如C.VB.C#.C++等时也学习过数组,平时项目中也经常用,但从没仔细再深入了解,这里学习Java又遇到了,重新整理一下. 一句话概括数组是什么:数组就是有一组相同数据类型的数据的集合. 数组变量属于引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量.数组中每个元素的类型可以是任何数据类型. 数组定义和初始化 数组的声明可以看做是在内存中为数组的每个元素分配空间的过程:数组的初始化可以看做往分配的空间里赋值的过程. 数组的定义 Java中定义数组的格式为:类