私はちょうど2つのBufferedReader
Sを作成することによって、それを解決するのないまっすぐ進む方法はありません私のoroginal BufferReader
に影響を与えることなく、新しいbufferReaderを作ることができ、他の方法。 (2人の読者は同じソースからのデータを消費するでしょう)。ソース上に別のレベルのバッファリングを追加する必要があるため、各読者は独立してストリームを読むことができます。
次のようにこれは、ApacheコモンズからTeeInputStream
を組み合わせ、PipedInputStream
によって、およびPipedOutputStream
達成することができる。
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();
}
}
出力:のコンストラクタにBufferedReader
インスタンスに渡す
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のコピー」とは、具体的にはどういう意味ですか?あなたは何とか同じストリームを2回読むことができると期待していますか?不可能です。実際、それは矛盾しています。 – EJP