Sun*_*nil 11 java io bufferedreader
我正在使用BufferedReader构造函数来创建现有的新副本BufferedReader.
BufferedReader buffReader = new BufferedReader(originalBuffReader);
Run Code Online (Sandbox Code Playgroud)
新buffReader的工作正常,但是当我这样做时,originalBuffReader.readLine()它给了我null.有没有其他方法我可以在bufferReader不影响我原创的情况下制作新作品BufferedReader.
仅供参考:我将bufferReader作为我方法的输入; 而我无权访问该来源.
aio*_*obe 16
任何其他方式我可以创建一个新的bufferReader而不影响我的oroginal BufferReader
只需创建两个BufferedReaders 就没有直接解决方法.(这两个读者将使用来自同一来源的数据.)您必须在源上添加另一级缓冲,因此每个读者都可以独立读取流.
这可以通过组合来实现TeeInputStream从Apache的百科全书和一个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();
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11686 次 |
| 最近记录: |