📜  Java.io.PushbackInputStream类(1)

📅  最后修改于: 2023-12-03 15:16:02.501000             🧑  作者: Mango

Java.io.PushbackInputStream类

Java.io.PushbackInputStream类是Java I/O包中提供的用于从输入流中读取数据的一个类。它允许你回退到输入流的前一个位置并重新读取相同的数据。

构造方法
PushbackInputStream(InputStream in)

创建一个PushbackInputStream对象,使用给定的InputStream。

PushbackInputStream(InputStream in, int size)

创建一个PushbackInputStream对象,使用给定的InputStream和推回缓冲区的大小。

方法
int read()

从输入流中读取一个字节,并在推回缓冲区中存储先前读取的字节。如果推回缓冲区已满,则抛出IOException。

int read(byte[] b, int off, int len)

从输入流中读取一定量的字节,存储在指定的字节数组中并在推回缓冲区中存储以前读取的字节。返回读取的字节数。

void unread(int b)

将指定的字节推回输入流中。

void unread(byte[] b, int off, int len)

将指定数组中从偏移量off开始的len个字节推回到输入流中。

boolean markSupported()

返回此输入流是否支持mark()方法,PushbackInputStream类返回false。

示例
InputStream inputStream = new FileInputStream("path/to/file.txt");
PushbackInputStream pushbackInputStream = new PushbackInputStream(inputStream, 8);
byte[] buffer = new byte[8];
while (pushbackInputStream.read(buffer) != -1) {
    if (buffer[0] == 'H' && buffer[1] == 'e' && buffer[2] == 'l' && buffer[3] == 'l'
            && buffer[4] == 'o' && buffer[5] == ' ' && buffer[6] == 'W' && buffer[7] == 'o') {
        pushbackInputStream.unread(buffer);
        System.out.println("Found the word in the input stream!");
        break;
    } else {
        System.out.println(new String(buffer));
        pushbackInputStream.unread(buffer);
    }
}

在上方的示例中,我们首先创建一个PushbackInputStream对象,并给定一个缓冲区的大小为8个字节,然后从文件中以块的方式读取数据。

如果缓冲区中的字节序列为“Hello Wo”,则将该字节序列推回输入流,然后输出“Found the word in the input stream!”。否则,推回缓冲区的字节序列将继续循环用于下一个块。