📅  最后修改于: 2023-12-03 15:16:26.131000             🧑  作者: Mango
PushbackInputStream 继承自 FilterInputStream,它的作用是将一个输入流转换为带有推回功能的输入流,可以在读取的数据中回退一定的字节数。PushbackInputStream 类提供了多个读取方法,其中常用的是 read() 方法。
public int read() throws IOException
其中,返回值是字节,如果已经读取到流的末尾,返回-1。
以下示例演示了如何使用 PushbackInputStream 的 read() 方法:
import java.io.IOException;
import java.io.ByteArrayInputStream;
import java.io.PushbackInputStream;
public class PushbackInputStreamDemo {
public static void main(String[] args) throws IOException {
String testString = "Hello World!";
ByteArrayInputStream inputStream = new ByteArrayInputStream(testString.getBytes());
PushbackInputStream pushbackInputStream = new PushbackInputStream(inputStream);
int byteRead = pushbackInputStream.read();
System.out.println("read: " + (char)byteRead);
pushbackInputStream.unread(byteRead);
System.out.println("unread: " + (char)pushbackInputStream.read());
byteRead = pushbackInputStream.read();
System.out.println("read: " + (char)byteRead);
pushbackInputStream.unread(byteRead);
pushbackInputStream.unread(testString.getBytes("UTF-8"));
byte[] readBuffer = new byte[5];
pushbackInputStream.read(readBuffer);
System.out.println("read: " + new String(readBuffer));
pushbackInputStream.unread(readBuffer);
pushbackInputStream.unread(testString.getBytes("UTF-8"));
byte[] buffer = new byte[testString.getBytes().length];
pushbackInputStream.read(buffer);
System.out.println("read: " + new String(buffer));
}
}
运行以上示例,得到输出:
read: H
unread: H
read: H
read: Hello
read: Hello World!
以上示例中,我们首先创建了一个字符串输入流 inputStream
,用它构造了一个 PushbackInputStream 实例 pushbackInputStream
。pushbackInputStream
对象继承了 inputStream 的所有读取方法,例如 read() 方法。
第一次调用 read() 方法,读取了流中的第一个字节 H,并打印出来。
接着,将刚刚读取的字节推回输入流中,再次调用 read() 方法,又读取到了 H,打印出来。
第三次调用 read() 方法,读取流中的下一个字节 e。
由于上述调用是字节级别的,因此需要按照特定编码读取流并推回。此外,我们还演示了如何读取和推回一定数量的字节。
int byteRead = pushbackInputStream.read();
// 读取一个字节并打印
System.out.println("read: " + (char)byteRead);
// 推回一个字节
pushbackInputStream.unread(byteRead);
// 再读取一个字节并打印
System.out.println("unread: " + (char)pushbackInputStream.read());
byteRead = pushbackInputStream.read();
// 再次读取一个字节并打印
System.out.println("read: " + (char)byteRead);
byte[] buffer = new byte[5];
pushbackInputStream.read(buffer);
// 读取5个字节并打印
System.out.println("read: " + new String(buffer));
// 推回 buffer 中的5个字节和整个字符串
pushbackInputStream.unread(buffer);
pushbackInputStream.unread(testString.getBytes("UTF-8"));
byte[] buffer = new byte[testString.getBytes().length];
pushbackInputStream.read(buffer);
// 读取整个字符串并打印
System.out.println("read: " + new String(buffer));
以上代码片段演示了如何调用 read()、unread() 方法进行输入流的读取和推回。