目录:系统学习 Java IO---- 目录,概览

BufferedReader

BufferedReader 类构造器接收一个 Reader 对象,为 Reader 实例提供缓冲。 缓冲可以加快 IO 的速度。 BufferedReader 不是一次从网络或磁盘读取一个字符,而是一次读取一个更大的块。 这通常要快得多,特别是对于磁盘访问和更大的数据量。

类似于 BufferedInputStream ,主要区别在于 BufferedReader 读取字符(文本),而 BufferedInputStream 读取原始字节。

除了向Reader实例添加缓冲外,BufferedReader 的行为与 Reader 非常相似。 BufferedReader 有一个额外的方法,即 readLine() 方法。 如果您需要一次读取一行输入,则此方法很方便。

String line = bufferedReader.readLine();

BufferedWriter

BufferedWriter 类构造器接收一个 Writer 对象,为 Writer 实例提供缓冲。 缓冲可以加快 IO 的速度。 BufferedWriter 不是一次写一个字符到网络或磁盘,而是一次写一个更大的块。 这通常要快得多,特别是对于磁盘访问和更大的数据量。

可以包装 FileReader 的 BufferedReader 。 BufferedReader 将从 FileReader 读取一个字符块(通常为 char 数组)。 因此,从 read() 返回的每个字符都从此内部数组返回。 当数组被读完时,BufferedReader 将一个新的数据块读入数组等。

可以设置 BufferedReader/BufferedWriter 在内部使用的缓冲区大小。默认大小是 8192 的字符数组。

一个简单的使用实例如下:

File file = new File("D:\\test\\1.txt");
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
writer.write("string from BufferedWriter");
writer.close(); int bufferSize = 8 * 1024; // 可选的缓冲字符数组大小
BufferedReader reader = new BufferedReader(new FileReader(file), bufferSize);
int data = reader.read();
while (data != -1) {
System.out.print((char) data); // string from BufferedWriter
data = reader.read();
}
reader.close();

PushbackReader

PushbackReader 类旨在从 Reader 解析数据时使用,它可以包装一个 Reader 对象。 PushbackReader 允许将读取的字符推回到 Reader 中下次调用 read() 时,将再次读取这些字符。通俗来讲,PushbackReader 提供了一种可能,让我们能读取流的部分内容而不破坏流。

PushbackReader 的工作方式与 PushbackInputStream 非常相似,只是 PushbackReader 适用于字符,而 PushbackInputStream 适用于字节。所以请参考前面的文章,不再赘述了。下面提供一个简单的例子:

PushbackReader pushbackReader = new PushbackReader(new FileReader("c:\\data\\input.txt"));
int data = pushbackReader.read();
pushbackReader.unread(data);
设置 PushbackReader 的后推限制

有一个构造函数 public PushbackReader(Reader in, int size) 可以设置 PushbackReader 的后推限制,如果不设置这个值,那默认为 1 ,这个值很重要,表示了最多能往回推多少个字符,如果读取了 10 个字符,但是后退限制为 1 的话,那总共只能推回 1 个字符,剩下的 9 个字符没办法推回去,流就被破坏了。

一个使用示例如下:

public class PushbackReaderExample {
public static void main(String[] args) throws IOException {
int limit = 2; // 可选,最多只能推回 2 个字符,默认值是 1
File file = new File("D:\\test\\1.txt"); // 文件内容是 123456789
PushbackReader reader = new PushbackReader(new FileReader(file), limit);
char[] bytes = new char[9]; // 读取 9 个字符;
reader.read(bytes);
System.out.println(bytes); // 123456789 reader.unread(97); // 推回操作都是将内容复制到推回缓冲区的前面
reader.unread(97); // 97 是字符 'a' 的 int 值,推回 2 个 'a'
// reader.unread(97); // 会失败并抛出异常,因为最多只能推回2个字符
reader.read(bytes);
System.out.println(bytes); // aa3456789
reader.close();
}
}
close()

当完成从 PushbackReader 读取字符后,记得关闭它。 关闭 PushbackReade还将关闭 PushbackReader 正在读取的 Reader 实例。

FilterReader/FilterWriter

FilterReader 是用于实现自己的过滤阅读器的基类。 基本上它只是覆盖了 Reader 中的所有方法。

与 FilterInputStream 一样,我认为这个类没有明智的目的。 我无法看到这个类实际上添加或更改了 Reader 中的任何行为,只是它在构造函数中需要一个 Reader 。 如果想选择扩展此类,则可以直接扩展 Reader 类,并避免层次结构中的额外类。FilterWriter 同样。

系统学习 Java IO (十四)----字符读写缓存和回退 BufferedReader/BufferedWriter & PushbackReader的更多相关文章

  1. 系统学习 Java IO (十五)----字符读写 Reader/Writer 其他子类

    目录:系统学习 Java IO---- 目录,概览 跟踪行号的缓冲字符输入流 LineNumberReader LineNumberReader 类是一个 BufferedReader ,用于跟踪读取 ...

  2. 系统学习 Java IO (十六)----这么多类,应该用哪个?

    目录:系统学习 Java IO---- 目录,概览 Java IO目的和功能 Java IO 包含 InputStream,OutputStream,Reader 和 Writer 类的许多子类. 原 ...

  3. 系统学习 Java IO (十二)----数据流和对象流

    目录:系统学习 Java IO---- 目录,概览 DataInputStream/DataOutputStream 允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型. 要想使用 ...

  4. 系统学习 Java IO (十)----回退流 PushbackInputStream

    目录:系统学习 Java IO---- 目录,概览 PushbackInputStream 旨在从 InputStream 解析数据时使用. 有时您需要先读取几个字节以查看将要发生的事情,然后才能确定 ...

  5. 系统学习 Java IO ---- 目录,概览

    Java IO 类的系统教程,原创.主要参考自英文教程 Java IO Tutorial 和 Java Doc. http://tutorials.jenkov.com/java-io/index.h ...

  6. 系统学习 Java IO (一)----输入流和输出流 InputStream/OutputStream

    目录:系统学习 Java IO ---- 目录,概览 InputStream 是Java IO API中所有输入流的父类. 表示有序的字节流,换句话说,可以将 InputStream 中的数据作为有序 ...

  7. 系统学习 Java IO (十三)----字符读写 Reader/Writer 及其常用子类

    目录:系统学习 Java IO---- 目录,概览 Reader Reader 类是 Java IO API 中所有 Reader 子类的基类. Reader 类似于 InputStream ,除了它 ...

  8. 系统学习 Java IO (四)----文件的读写和随机访问 FileInputStream/FileOutputStream & RandomAccessFile

    目录:系统学习 Java IO---- 目录,概览 文件输入流 FileInputStream 这是一个简单的FileInputStream示例: InputStream input = new Fi ...

  9. 系统学习 Java IO (六)----管道流 PipedInputStream/PipedOutputStream

    目录:系统学习 Java IO---- 目录,概览 PipedInputStream 类使得可以作为字节流读取管道的内容. 管道是同一 JVM 内的线程之间的通信通道. 使用两个已连接的管道流时,要为 ...

随机推荐

  1. UWP 中的各种文件路径(用户、缓存、漫游、安装……)

    原文 UWP 中的各种文件路径(用户.缓存.漫游.安装……) UWP 提供了多种不同文件路径访问方式,对应到不同的文件路径中.可能我们只是简单用 ApplicationData.Current 获取一 ...

  2. 解决关于archlinux升级至3.16.1,Xorg桌面环境无法进入的问题

    [现象]有终端输入username,password后,桌面环境启动失败. [报错]log文件里显示: (EE) Fatal server error: (EE) xf86OpenConsole: V ...

  3. Cache coherence protocol

    A cache coherence protocol facilitates a distributed cache coherency conflict resolution in a multi- ...

  4. Python算法(含源代码下载)

    关键字:Python Algorithms Python算法  Mastering Basic Algorithms in the Python Language 使用Python语言掌握基本算法 P ...

  5. [OpenGL]OpenGL坐标系和坐标变换

    OpenGL通过摄像机的模拟.要实现一个三维计算机图形重大转变,这是几何变换(模型转换-查看转型(两者统称为几何变换)).投影.作物转型.口变换等.同一时候,OpenGL还实现了矩阵堆栈等.理解掌握了 ...

  6. silverlight,WPF动画终极攻略之阳光灿烂篇(Blend 4开发)

    原文:silverlight,WPF动画终极攻略之阳光灿烂篇(Blend 4开发) 前面我们画了一只会飞动的小鸟,今天我们在目标是一个会发光的太阳.本章节的动画虽然简单,但是实现的效果可是一点也不打折 ...

  7. ASP.NET Core Razor 视图导入 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Razor 视图导入 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 视图导入 上一章节我们介绍了视图起始页,学习 ...

  8. 常见的选择<数据源协议,委托协议>(IOS发展)

    -常见的选择必须满足这两个协议,约定实施.一个为数据源协议 -托付协议负责控制控件UI.事件响应, 实现可选 -数据源协议负责控件与应用数据模型的桥梁,一般必须实现 @interface ViewCo ...

  9. Matlab Tricks(二十)—— Hilbert matrix 的创建

    Hij=1i+j−1 N = 5; A = ones(N, 1)*(1:N); B = A'; H = 1./(M+N-1);

  10. FastDFS是纯C语言实现,只支持Linux,适合以中小文件为载体的在线服务,还可以冗余备份和负载均衡

    一.理论基础 FastDFS比较适合以中小文件为载体的在线服务,比如跟NGINX(APACHE)配合搭建图片服务器. 分布式文件系统FastDFS FastDFS是纯C语言实现,只支持Linux.Fr ...