理解IO流:InputStream和OutputStream,FileInputStream和FileOutputStream,Reader和Writer,FileReader和FileWriter,

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了理解IO流:InputStream和OutputStream,FileInputStream和FileOutputStream,Reader和Writer,FileReader和FileWriter,相关的知识,希望对你有一定的参考价值。

/*
* 1、理解 "流" ?
* 动态性、连续性、方向性。
*
* 2、在java语言中,将数据的输入/输出称之为 IO流。 IO流的分类:
* 1) 从方向分: 输入流 , 输出流。 (参照计算机的内存)
* 将数据送到内存中去称之为输入流。反之,称之为输出流。
*
* 2) 从处理单位来分: 字节流(8位二进制数据), 字符流(16位二进制数据)。
*
* 3) 从是否有数据源来分: 节点流(有数据源), 处理流(必须套在节点流上)。
*
* 3、在Java语言中,所有流类均来自 java.io.* 包。且所有流类均继承自四个抽象的类。
* 1) InputStream 抽象的字节输入流类。
* 2) OutputStream 抽象的字节输出流类。
*
* 3) Reader 抽象的字符输入流类。
* 4) Writer 抽象的字符输出流类。
*
*
* 4、InputStream 抽象的字节输入流类的特性:
* 1) 功能: 它以字节的方式来读取数据。
*
* 2) 提供的抽象方法:
* int read(); 用来读取一个字节,反馈这个字节对应的整数。因此,这个整数的范围为[0, 255];由2^8-1得来
* 当它反馈的是一个 -1 时,表明读取完毕。
*
* void close(); 用来关闭输入流,释放所点资源,确保安全。
*
* int read(byte[] b1); 用来读取多个字节数据并存放到b1数组中,反馈读取的总字节数。
*
* 3) 它针对文件操作的子类有: FileInputStream(文件的字节输入流类)。
*
* 5、FileInputStream类的特性:
* 1) 功能:它用来以字节方式读取指定文件的内容。
* 2) 常用方法:
* int read(); 用来读取一个字节,反馈这个字节对应的整数。因此,这个整数的范围为[0, 255];
* 当它反馈的是一个 -1 时,表明读取完毕。
*
* void close(); 用来关闭输入流,释放所点资源,确保安全。
*
* int read(byte[] b1); 用来读取多个字节数据并存放到b1数组中,反馈读取的总字节数。
*
* 3) 通过案例理解并掌握FileInputStream类的应用(重点)。
*
* 6、OutputStream抽象的字节输出流。
* 1) 功能:它用来以字节方式输出数据。
*
* 2) 它提供的抽象方法:
* void write( int x ); 将给定的整数以字节方式输出。因此,当给定的整数超出了[0, 255]范围
* 时,则输出会失真。
*
* void flush(); 一次性将缓冲区中滞留的数据输出到目的地。即:确保数据输出成功。
*
* void close(); 关闭输出流,释放所点资源,确保安全。
*
* 3) 它针对文件操作的子类有: FileOutputStream文件的字节输出流类。
*
* 7、FileOutputStream文件的字节输出流类,其特性如下:
* 1) 功能:它将给定的数据以字节方式输出到目的地(文件中)。
*
* 2) 常用方法:
* void write( int x ); 将给定的整数以字节方式输出。因此,当给定的整数超出了[0, 255]范围
* 时,则输出会失真。
*
* void flush(); 一次性将缓冲区中滞留的数据输出到目的地。即:确保数据输出成功。
*
* void close(); 关闭输出流,释放所点资源,确保安全。
*
* 3) 通过案例理解并掌握 FileOutputStream文件的字节输出流类(重点)。
* 注意: 存盘时文件不存在没有关系,它会自动创建。但,它所在路径必须存在且正确。
* 注意: 根目录、子目录; 路径: 绝对路径、相对路径。
*
* 8、将FileInputStream 和 FileOutputStream 两个类结合起来实现文件的复制、粘贴。

*9、Reader 抽象的字符输入流类:
* 1) 功能: 它以字符方式来读取内容。
* 2) 抽象方法:
* int read(); 用来读取一个字符,反馈这个字符对应的整数。因此,这个整数的范围为[0, 65535];
* 当它反馈的是一个 -1 时,表明读取完毕。
*
* void close(); 用来关闭输入流,释放所点资源,确保安全。
*
* 3) 它针对文件操作的子类有: FileReader 文件的字符输入流类。
*
* 通过案例理解并掌握 FileReader文件的字符输入流。
*
* 10、Writer 抽象的字符输出流类:
* 1) 功能: 将给定的数据以字符方式输出。
*
* 2) 抽象方法:
* void write( int x ); 将给定的整数以字符方式输出。只要x不超出[0 , 65535]范围就不会失真。
*
* void flush(); 将缓冲区中的数据一次性输出到目的地。
*
* void close(); 关闭字符输出流,释放所占资源,确保安全。
*
* 3) 它针对文件操作的子类有: FileWriter 文件的字符输出流类。
*
* 通过案例理解并掌握 FileWriter类。
*
* 11、FileReader和FileWriter 文件字符输入/输出流结合可实现文件的复制。
* 注意: 它们只能用来复制文本文件。
*
* 12、缓冲流:
* 1) 出现目的: 提高输入/输出效率。
* 2) 缓冲流有两对:
* a) BufferedInputStream 和 BufferedOutputStream (缓冲的字节输入/输出流)
*
* b) BufferedReader 和 BufferedWriter (缓冲的字符输入/输出流)
*
* 3) 缓冲流属于处理流,使用时必须将其套在节点流。
*
* 4) 为了提高文件复制的速度,我们使用缓冲流。(案例)

*13、转换流: InputStreamReader 和 OutputStreamWriter :

* 1) InputStreamReader 字节转换成字符的一个输入流,最后,以字符方式读取数据。
* OutputStreamWriter 字符转换成字节的一个输出流,最后,以字节方式输出数据。

* 2) 功能: 当给的类型数据与要的类型数据不一致时,需要进行转换。
* 另一个功能: 可以为输入/输出指定字符编码集,从而以指定的字符编码集实现数据存盘管理或读取相应字符编码集的文件。

* 3) 案例1: 通过 FileInputStream类的对象去读取带汉字的文件内容并显示在屏幕时会乱码。
* 如何解决这个问题?
* 答案: 通过InputStreamReader转换流来实现。 或者更换FileInputStream为FileReader类实现读取。

* 4) 案例2:通过FileOutputStream类的对象把汉字存盘到文件中时会失真。
* 如何解决这个问题?
* 答案: 通过 OutputStreamWriter转换流来实现。 或者更换为FileWriter类实现存盘。
*/

以上是关于理解IO流:InputStream和OutputStream,FileInputStream和FileOutputStream,Reader和Writer,FileReader和FileWriter,的主要内容,如果未能解决你的问题,请参考以下文章

Java的IO操作,个人理解。

java IO流的API

java io流缓冲理解

Java 输入/输出——理解Java的IO流

关于Java IO InputStream 的一点整理!

IO流2