- 想要知道开发时,使用哪个流对象, 只要通过四个明确即可.
-
明确源和目的(数据汇)
- 源: InputStream 或 Reader
- 目的: OutPutStream 或 Writer
-
明确数据是否是纯文本数据
- 源:
- 是纯文本: Reader
- 不是纯文本: InputStream
- 目的:
- 是纯文本: Writer
- 不是纯文本: OutputStream
- 到这里, 就可以明确需求中具体要使用哪个体系.
- 源:
-
明确具体的设备, 即要明确使用哪一个对象
- 源设备:
- 硬盘: File
- 键盘: System.in
- 内存: 数组
- 网络: Socket 流
- 目的设备:
- 硬盘: File
- 键盘: System.out
- 内存: 数组
- 网络: Socket 流
- 源设备:
-
是否需要额外的功能
- 需要高效(缓冲区), 就加上 buffer
- 需要转换, 就将字节流转换为字符流
// 示例: 将一个中文字符串数据按照指定的编码表写入到一个文本文件中.
/*
* 思路:
* 1. 目的: OutputStream, Writer
* 2. 是纯文本数据: Writer
* 3. 设备: 硬盘, File
* FileWriter fw = new FileWriter("a.txt");
* fw.write("你好");
* fw.close();
* 注意:
* 既然需求中已经明确了指定编码表的动作, 那就不可以使用 FileWriter, 因为 FileWriter 内部
* 使用的是默认的本地编码表.
* 因此,只能使用其父类, OutputStreamWriter, 转换流
* OutputStreamWriter 的构造方法中必须带有一个字节输出流对象, 既然是操作文件,
* 那么该对象应该是 FileOutputStream.
*
* OutputStreamWriter osw =
* new OutputStreamWriter(new FileOutputStream("a.txt"), charsetName(编码表));
* osw.write("你好");
* osw.close();
*/
- 什么时候使用转换流呢?
- 源或者目的对应的设备是字节流, 但是操作的却是文本数据, 可以使用转换流作为桥梁
提高对文本操作的便捷 - 一旦操作文本涉及到具体指定的编码表时, 必须使用转换流.
- 源或者目的对应的设备是字节流, 但是操作的却是文本数据, 可以使用转换流作为桥梁
参考资料