1

我有一个 2 GB 的文件,我想用 Java 读取(实际上是四个 2 GB 的文件)。因此,Java 7 中有一个新功能可以让我一次读取所有字节。

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;

public class reconstructor {

    public static void main(String[] args) throws IOException {

        Path p = Paths.get("test.txt");     
        for (int i = 0; i < 1; i++) {
            byte[] b = Files.readAllBytes(p);
            Files.write(p, b, StandardOpenOption.APPEND);
        }

    }

}

这是一个愚蠢的程序,它将读取一个预先输入了一个字节的文件,并不断地读取该文件并将读取的内容附加到同一个文件中。现在显然,RAM 不足以一次读取一个 2gb 文件,更不用说其中四个了,所以我想知道是否有任何快速方法,而不使用外部库(除非这是唯一的方法)来读取四个一个字节一个字节地文件,这样 RAM 就不会过载(否则我最终会出现 Java 堆错误)。

4

2 回答 2

7

逐字节读取是另一种极端的解决方案,效率非常低。您应该简单地使用 BufferedInputStream,并逐块读取字节。

阅读有关字节流的 Java IO 教程

于 2012-10-28T17:57:41.063 回答
0

尝试内存映射 I/O,本教程的最后一个示例:http ://www.polarsparc.com/pdf/MemoryMappedIOinJava.pdf

于 2012-10-28T18:04:44.570 回答