PushbackInputStream和PushbackReader是推回输入流,它们有一片推回缓冲区域,在读取数据时,会优先从推回缓冲区域读取,只有推回缓冲区域的内容没有装满read()所需数组的大小时才会去流中读取。

public class PushbackTest {
    public static void main(String[] args) {
        // 指定推回缓冲区长度为64.
        try (PushbackReader pr = new PushbackReader(new FileReader(
                "src/inputandoutput/PushbackTest.java"), 64)) {
            char[] buff = new char[32];
            String lastContent = "";
            int hasRead = 0;
            while ((hasRead = pr.read(buff)) > 0) {
                String content = new String(buff, 0, hasRead);
                int targetIndex = 0;
                if ((targetIndex = (content + lastContent)
                        .indexOf("new PushbackIndex")) > 0) {
                    pr.unread((lastContent + content).toCharArray());
                    if (targetIndex > 32) {
                        buff = new char[targetIndex];
                    }
                    pr.read(buff, 0, targetIndex);
                    System.out.print(new String(buff, 0, targetIndex));
                    System.exit(0);
                } else {
                    System.out.println(lastContent);
                    lastContent = content;
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}