使用Java 7 API逐字节读取文件

时间:2012-10-28 17:53:57

标签: java file input io java-7

我想用Java读取一个2 GB的文件(实际上有四个2gb文件)。因此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堆错误)。

2 个答案:

答案 0 :(得分:7)

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

阅读Java IO tutorial about byte streams

答案 1 :(得分:0)

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