1

Javaで読みたい2GBのファイル(実際には4つの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);
        }

    }

}

これは、1バイトが事前に入力されたファイルを読み取り、そのファイルを継続的に読み取り、読み取ったものを同じファイルに追加するダムプログラムです。明らかに、RAMは一度に2GBのファイルを読み取るのに十分な大きさではなく、そのうちの4つは言うまでもなく、外部ライブラリを使用せずに(それが唯一の方法でない限り)4つを読み取るための迅速な方法があるかどうか疑問に思いましたRAMが過負荷にならないように、ファイルを1バイトずつファイルします(そうしないと、Javaヒープエラーが発生します)。

4

2 に答える 2

7

バイトごとに読み取ることは、もう1つの極端な解決策であり、非常に非効率的です。単にBufferedInputStreamを使用し、バイトをチャンクごとに読み取る必要があります。

バイトストリームに関するJavaIOチュートリアルをお読みください。

于 2012-10-28T17:57:41.063 に答える
0

このチュートリアルの最後の例であるメモリ マップド I/O を試してください: http://www.polarsparc.com/pdf/MemoryMappedIOinJava.pdf

于 2012-10-28T18:04:44.570 に答える