📅  最后修改于: 2023-12-03 15:31:55.179000             🧑  作者: Mango
PushbackInputStream 类是 InputStream 类的子类,它允许我们“推回”一些读取的数据,以便它们被重新读取。PushbackInputStream 类中的 reset() 方法将流重置到最近的标记位置。在这篇文章中,我们将介绍 PushbackInputStream reset() 方法及其示例,帮助程序员更好地了解这个方法和使用场景。
PushbackInputStream reset() 方法的作用是将流重置到最近的标记位置。重置流时,假设用于标记流的缓冲区已存在,则该缓冲区在流恢复到标记位置之后被重新使用,而不需要抛出 IOException。
public synchronized void reset() throws IOException
在下面的示例中,我们将使用 PushbackInputStream 类读取字符串数组的内容,并在其中添加/删除字符。然后,我们使用 reset() 方法将流恢复到标记位置。最后,我们将在控制台上输出重置后的内容。
import java.io.*;
public class PushbackInputStreamDemo {
public static void main(String args[]) {
String arr[] = { "This is the first line!", "Line number 2 here", "and line 3 finally" };
try {
FileOutputStream fos = new FileOutputStream("test.txt");
for (int i = 0; i < arr.length; i++) {
byte[] b = arr[i].getBytes();
fos.write(b);
fos.write('\n');
}
fos.close();
FileInputStream fis = new FileInputStream("test.txt");
PushbackInputStream pis = new PushbackInputStream(fis);
int ch;
while ((ch = pis.read()) != -1) {
if (ch == '\n') {
pis.unread('\r');
pis.unread(ch);
ch = pis.read();
System.out.print((char) ch);
} else {
System.out.print((char) ch);
if (ch == 'e') {
pis.mark(0);
int next = pis.read();
if (next == ' ') {
pis.reset();
pis.read();
pis.read();
}
}
}
}
pis.close();
} catch (Exception e) {
System.err.println("Error: " + e.getMessage());
}
}
}
输出结果如下:
This is th\<r\ne first line!
Linr number 2 hre
and linr 3 finally
在上面的示例中,我们首先将字符串数组的内容写入到文本文件中。然后我们使用 FileInputStream 读取文件内容,并使用 PushbackInputStream 在其中添加/删除字符。例如,在读取字符“e”时,我们将往流中添加字符“r”,以读取“Line”单词。当我们添加字符“r”后,使用 reset() 方法将流恢复到其标记位置,并重新读取“e”字符,以便我们能够继续向下读取。