如何制作 BufferedReader 的副本? [英] How can I make a copy of a BufferedReader?

查看:19
本文介绍了如何制作 BufferedReader 的副本?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 BufferedReader 构造函数来制作现有 BufferedReader 的新副本.

I am using a BufferedReader constructor to make a new copy of an existing BufferedReader.

BufferedReader buffReader = new BufferedReader(originalBuffReader);

新的 buffReader 工作正常,但是当我执行 originalBuffReader.readLine() 时,它给了我 null.有没有其他方法可以制作一个新的 bufferReader 而不会影响我原来的 BufferedReader.

The new buffReader is working fine, but when I do originalBuffReader.readLine() it gives me null. Is there any other way I can make a new bufferReader without affecting my original BufferedReader.

仅供参考:我将 bufferReader 作为我方法的输入;而我无权访问源代码.

FYI: I am getting bufferReader as an input to my method; and I do not have a access to the source.

推荐答案

我可以通过任何其他方式制作新的 bufferReader 而不会影响我原来的 BufferReader

通过创建两个 BufferedReader 没有直接的方法来解决它.(两个读取器将使用来自同一源的数据.)您必须在源上添加另一级缓冲,以便每个读取器可以独立读取流.

There's no straight forward way of solving it by just creating two BufferedReaders. (The two readers will consume data from the same source.) You'll have to add another level of buffering on the source, so each reader can read the stream independently.

这可以通过结合TeeInputStream 来自 Apache Commons 和 PipedInputStreamPipedOutputStream 如下:

This can be achieved by combining TeeInputStream from Apache Commons and a PipedInputStream and PipedOutputStream as follows:

import java.io.*;
import org.apache.commons.io.input.TeeInputStream;
class Test {
    public static void main(String[] args) throws IOException {

        // Create the source input stream.
        InputStream is = new FileInputStream("filename.txt");

        // Create a piped input stream for one of the readers.
        PipedInputStream in = new PipedInputStream();

        // Create a tee-splitter for the other reader.
        TeeInputStream tee = new TeeInputStream(is, new PipedOutputStream(in));

        // Create the two buffered readers.
        BufferedReader br1 = new BufferedReader(new InputStreamReader(tee));
        BufferedReader br2 = new BufferedReader(new InputStreamReader(in));

        // Do some interleaved reads from them.
        System.out.println("One line from br1:");
        System.out.println(br1.readLine());
        System.out.println();

        System.out.println("Two lines from br2:");
        System.out.println(br2.readLine());
        System.out.println(br2.readLine());
        System.out.println();

        System.out.println("One line from br1:");
        System.out.println(br1.readLine());
        System.out.println();
    }
}

输出:

One line from br1:
Line1: Lorem ipsum dolor sit amet,      <-- reading from start

Two lines from br2:
Line1: Lorem ipsum dolor sit amet,      <-- reading from start
Line2: consectetur adipisicing elit,

One line from br1:
Line2: consectetur adipisicing elit,    <-- resumes on line 2

这篇关于如何制作 BufferedReader 的副本?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆