开发者学堂课程【Java 高级编程:转换流】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/20/detail/315
转换流
一、转换流
所谓的转换流指的是可以实现字节流与字符流操作的功能转换。
例如:进行输出的时候,output stream 需要将内容变为字节数组后才可以输出,而 Writer 可以直接输出字符串,这一点是方便的,所以很多人就认为需要提供有一种转换的机制来实现不同流类型的转换操作。
为此在 java.io 包里面提供有两个类:
InputStreamReader、OutputStreanmwriter。
以下为两个类的结构操作方式。
在代码中找到类 Output stream writer和input stream reader,将其打开。
出现以下界面
Pubilic class OutputStream Writer
Extends Writer
Public class InputStreamReader
Extends Reader
以上为 output stream writer和input stream reader 的定义。
public OutputStreamWriter(OutputStream out)
public InputStreamReader(InputStream in)
以上为 output stream writer 和 input stream reader 的构造方法。
以下为转换流:
Writer 中有一个子类 output stream writer,和 writer 是同一个时期出来的。
Reader 中子类是 input stream reader。Writer 在整个设计过程中和 output stream 产生关系,Reader 若 input stream 产生关系。
接收字节流对象利用向上转换变成字符流对象。
转换的本质在于对象的转型和构造方法的接收。通过类的继承结构与构造方法,可以发现所谓的转换处理就是将接收到的字节流对象通过向上转流型变为字符流对象。
范例:观察转换
代码如下
在整体代码中,file output stream 和 File 位有关。
程序在此,output 只能操作字节。如果加入字节流变为字符流的代码,可直接输出字符串。字符流适合处理中文。
此转换在是中文的情况下,处理较为方便,在不是中文的情况下,处理不够方便。
但讲解转换流的主要目的基本上不是为了让开发者去记住它,而是知道有这样一种功能,但同时更多的是需要进行结构的分析处理。
通过之前的字节流和字符流的一系列分析之后,你会发现 output stream 类有 fire output stream,直接子类 input stream 类有 File input stream 直接子类,但是观察 file writer,file reader 类的继承关系。
打开 file reader 和 file writer,观察其继承结构。
public class FileWriter
extends OutputStreamWriter
打开 file writer,发现 output stream writer,打开 file reader,发现 input stream reader。
证明之前的操作一直存在转换流这一概念。
在类结构定义时,已经准确的描述出转换流程。
在整体代码中,file output stream 和 File 位有关。
程序在此,output 只能操作字节。如果加入字节流变为字符流的代码,可直接输出字符串。字符流适合处理中文。
此转换在是中文的情况下,处理较为方便,在不是中文的情况下,处理不够方便。
但讲解转换流的主要目的基本上不是为了让开发者去记住它,而是知道有这样一种功能,但同时更多的是需要进行结构的分析处理。
通过之前的字节流和字符流的一系列分析之后,你会发现 output stream 类有 fire output stream,直接子类 input stream 类有 File input stream 直接子类,但是观察 file writer,file reader 类的继承关系。
打开 file reader 和 file writer,观察其继承结构。
public class FileWriter
extends OutputStreamWriter
打开 file writer,发现 output stream writer,打开 file reader,发现 input stream reader。
证明之前的操作一直存在转换流这一概念。
在类结构定义时,已经准确的描述出转换流程。
正常情况下进行文件读取,需要以下流程。
而缓存就是如果用字节流读取,并不表示整个过程中没有内存。在严格意义上来讲,内存将一直存在。
只要程序需要读取数据,那么内存就会一直存在。如果用字节流读取,流程如下。
如果用字符流读取,还是向 cpu 请求。但是当读数据的时候,会准备缓冲区。适合传输的数据都是字节数据。
Cpu 请求到的数据是字节数据,而整个流程中磁盘传的是字节数据,而有了缓存之后相当于所有的数据已经经过处理。
意味着这些数据要读取到缓存区之中,读取到缓存区中直接过程就在于会对数据进行先期处理。在处理过程中就极为方便处理中文数据。
在电脑中,文件都是二进制数据的集合,缓冲区会进行处理。转换流的处理在定义结构上更加清楚描述出所有读取到的字节数据,并要求进行转换处理。
这就是转换流存在的意义所在。





