[英]How do I read from two different places in a file using Buffered IO in Java
我正在从文件中读取数字以执行合并排序。 合并排序必须作为外部排序执行,因为它是一个很大的数字列表,并且可用内存很少。 我有一个有效的实现,它使用BufferedOutputStream加快输出速度,并且我想对输入流执行相同的操作。 但是,必须从两个不同的位置读取输入以执行合并。
本质上,如果我有:
RandomAccessFile File = new RandomAccessFile("File.dat", "rw");
BufferedInputStream Buffer = new BufferedInputStream(
new FileInputStream(File.getFD()));
DataInputStream InputStream = new DataInputStream(Buffer);
我使用InputStream.readInt()
读取了一些整数,但也想使用File.seek(n)
来访问文件的其他部分,我如何知道何时下次调用File来获取更多数据,因此在查找之前要求提供更多数据。 另外,对于同一个基础文件,是否可以有两个RandomAccessFiles?
对于需要执行相同操作的其他人,这是一个使用两个不同的bufferedInputStreams和RandomAccessFiles从流中读取的示例:
RandomAccessFile FileA = new RandomAccessFile("File.dat", "rw");
System.out.println("Writing 100");
for (int i = 0; i < 100; i++) {
FileA.writeInt(i);
}
FileA = new RandomAccessFile("File.dat", "r");
RandomAccessFile FileB = new RandomAccessFile("File.dat", "r");
FileA.seek(0);
DataInputStream InputStreamA = new DataInputStream(new BufferedInputStream(
new FileInputStream(FileA.getFD())));
FileB.seek(0);
DataInputStream InputStreamB = new DataInputStream(new BufferedInputStream(
new FileInputStream(FileB.getFD())));
System.out.println("Read A");
for (int i = 0; i < 10; i++) {
System.out.println(InputStreamA.readInt());
}
System.out.println("Read B");
for (int i = 0; i < 10; i++) {
System.out.println(InputStreamB.readInt());
}
System.out.println("Run A");
for (int i = 0; i < 10; i++) {
System.out.println(InputStreamA.readInt());
}
System.out.println("Run B");
for (int i = 0; i < 10; i++) {
System.out.println(InputStreamB.readInt());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.