📜  Java.io.PushbackReader类(1)

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

Java.io.PushbackReader类

java.io.PushbackReader 类是 Reader 类的子类,它允许我们在读取字符流时将已读取的字符退回到流中。它还提供了一些其他的方法,例如 unread()mark()reset() 等。

构造方法

PushbackReader 类的构造方法如下:

public PushbackReader(Reader in)
public PushbackReader(Reader in, int size)

其中 in 参数是一个 Reader 实例,表示输入流。size 参数表示推回缓存区的大小。

主要方法

PushbackReader 类主要的方法如下:

public void close()

关闭输入流。

public void mark(int readAheadLimit) throws IOException

标记输入流的当前位置,并设置最多可以跳过的字节数。readAheadLimit 参数表示最多可以跳过的字节数。

public boolean markSupported()

判断输入流是否支持 mark()reset() 方法。

public int read() throws IOException

读取下一个字符。如果到达流的结尾,则返回 -1

public int read(char[] cbuf, int off, int len) throws IOException

从输入流中读取字符并将它们存储到字符数组 cbuf 中。参数 off 表示字符数组开始存储的位置,len 表示读取的字符数。

public boolean ready() throws IOException

判断输入流是否准备好被读取,如果准备好则返回 true,否则返回 false

public void reset() throws IOException

将输入流重置到最近的 mark() 标记。

public void unread(int c) throws IOException

将指定的字符推回输入流。如果推回超出了缓存区的大小,则会引发 IOException

public void unread(char[] cbuf) throws 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) 将字符数组转换成字符串。