字符流家族

目录

一. 前言

二. 实现类

2.1. StringReader/StringWriter

2.2. InputStreamReader/OutputStreamWriter

2.3. FileReader/FileWriter

2.4. BufferedReader/BufferedWriter

2.5. PipedReader/PipedWriter

2.6. CharArrayReader/CharArrayWriter

2.7. FilterReader/FilterWriter/PushBackReader


一. 前言

在字节流的基础上,加上编码,因为字节流在操作字符时,有可能会有中文导致的乱码。

1. 以 Reader 和 Writer 结尾;
2. Reader 是字符输入流的父类,Writer 是字符输出流的父类;
3. 读写的时候按字符读写,主要用来处理字符或字符串;
4. 字符流在操作时需要用到缓冲区

二. 实现类

2.1. StringReader/StringWriter

StringReader类是一个以字符串为源的字符流。它接受输入字符串并将其更改为字符流。它继承了Reader类。在StringReader类中,未使用系统资源(如网络套接字和文件),因此不需要关闭StringReader。

StringWriter是将一个StringBuffer对象作为输出目的地,并且可以在构造函数指定 buffer 的大小。StringWriter只是将数据写入到一个buffer对象中,而不是实质的物理介质,这个对象最后又可以转换成字符串(toString)。

2.2. InputStreamReader/OutputStreamWriter

InputStreamReader 是字节流通向字符流的桥梁,它将字节流转换为字符流。可以指定字符编码格式,入参传递InputStream对象。InputStream对象定义方法有两种,System.in或FileInputStream对象。

InputStreamReader isr1 = new InputStreamReader(System.in);
InputStreamReader isr2 = new InputStreamReader(new FileInputStream("/opt/xxx"));
InputStreamReader isr3 = new InputStreamReader(new FileInputStream(new File("/opt/xxx")));

OutputStreamWriter 是Writer的子类,将输出的字符流变为字节流,即将一个字符流的输出对象变为字节流的输出对象。

OutputStreamWriter out1 = new OutputStreamWriter(new FileOutputStream(file), CharsetName);

2.3. FileReader/FileWriter

FileReader是InputStreamReader的子类,不能指定字符编码,其他与InputStreamReader基本类似。

FileReader fr1 = new FileReader("/opt/xxx.txt");
FileReader fr2 = new FileReader(new File("/opt/xxx.txt"));

FileWriter 类从 OutputStreamWriter 类继承而来。该类按字符向流中写入数据。可以通过以下几种构造方法创建需要的对象。

FileWriter fw = FileWriter(FileDescriptor fd);
FileWriter fw2 = FileWriter(String fileName, boolean append);
FileWriter fw3 = FileWriter(File file, boolean append);

2.4. BufferedReader/BufferedWriter

BufferedReader 和 BufferedWriter 类各拥有 8192 个字符的缓冲区。属于字符流,按照字符读取数据的。

BufferedReader  从字符输入流中读取文本,内部缓冲各个字符,从而实现字符、数组和行的高效读取

BufferedReader bufferFr = new BufferedReader(new FileReader(filename));
BufferedReader bufferIsr = new BufferedReader(new InputStreamReader(fileinputstream));

BufferedWriter 将文本写入字符输出流,内部缓冲各个字符,从而提供单个字符、数组和字符串的高效写入

BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filename));
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(fileoutputstream));

2.5. PipedReader/PipedWriter

PipedReader 和 PipedWriter,意为管道读写流。所谓管道,那就是有进有出,所以这也是它们跟其它流对象最显著的区别:PipedReader和PipedWriter必须成对使用才有意义。

PipedWriter 扮演生产者的角色,将字符数据写入到管道;PipedReader扮演消费者的角色,负责将数据从管道取出消费掉。

2.6. CharArrayReader/CharArrayWriter

读 CharArrayReader 需要接受一个字符数组作为参数,就是从CharArray 中读,所以需要一个字符数组。

写 CharArrayWriter  就是写入到一个CharArray 中去,所以,它内部维护了一个字符数组。显然,字符数组都是内存中的数据。

2.7. FilterReader/FilterWriter/PushBackReader

FilterReader 和 FilterWriter 用于读写过滤后的字符流的抽象类。除了简单覆盖父类方法,没有添加额外的方法。

FilterReader:过滤器字符输入流,用于读取过滤后的字符流的抽象类。
FilterWriter:过滤器字符输出流,用于写入过滤后的字符流的抽象类。

PushBackReader 是 FilterReader 的子类,一个字符流读取器,允许将字符推回到流中。拥有一个PushBack缓冲区,只要PushBack缓冲区没有满,就可以使用unread()将数据推回流的前端。除了简单覆盖父类方法,没有添加额外的方法。

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流华追梦

你的鼓励将是我创作最大的动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值