📅  最后修改于: 2023-12-03 15:31:34.820000             🧑  作者: Mango
java.io.PushbackReader
类是 Reader
类的子类,它允许我们在读取字符流时将已读取的字符退回到流中。它还提供了一些其他的方法,例如 unread()
、mark()
和 reset()
等。
PushbackReader
类的构造方法如下:
public PushbackReader(Reader in)
public PushbackReader(Reader in, int size)
其中 in
参数是一个 Reader
实例,表示输入流。size
参数表示推回缓存区的大小。
PushbackReader
类主要的方法如下:
关闭输入流。
标记输入流的当前位置,并设置最多可以跳过的字节数。readAheadLimit
参数表示最多可以跳过的字节数。
判断输入流是否支持 mark()
和 reset()
方法。
读取下一个字符。如果到达流的结尾,则返回 -1
。
从输入流中读取字符并将它们存储到字符数组 cbuf
中。参数 off
表示字符数组开始存储的位置,len
表示读取的字符数。
判断输入流是否准备好被读取,如果准备好则返回 true
,否则返回 false
。
将输入流重置到最近的 mark()
标记。
将指定的字符推回输入流。如果推回超出了缓存区的大小,则会引发 IOException
。
将字符数组中的字符推回输入流。
以下是使用 PushbackReader
类的一个简单示例:
public class PushbackReaderExample {
public static void main(String[] args) throws Exception {
String str = "Hello, world!";
StringReader reader = new StringReader(str);
PushbackReader pushbackReader = new PushbackReader(reader);
int c = pushbackReader.read();
System.out.println((char) c); // H
while ((c = pushbackReader.read()) != -1) {
if (c == ',') {
pushbackReader.unread('!');
break;
}
System.out.print((char) c);
}
char[] buf = new char[6];
int len = pushbackReader.read(buf);
System.out.println(new String(buf, 0, len)); // world!
pushbackReader.close();
}
}
以上代码首先创建一个 StringReader
实例,并将其作为 PushbackReader
的构造方法参数。然后调用 read()
方法读取字符流,每读取一个字符,就用 System.out.println()
方法输出它们。当读取了一个逗号时,调用 unread()
方法将 '!' 字符推回输入流中。最后使用 read(char[] cbuf)
方法读取之后的字符。注意在输出时使用了 new String(buf, 0, len)
将字符数组转换成字符串。