0

現在、ファイルからバイトを印刷しようとしていますが、小さなファイルでは問題なく動作しますが、ギガバイト範囲のファイルを使用すると、「OutOfMemoryError 要求された配列サイズが VM を超えています」という例外が発生します。通常、配列を小さくしますが、これは私はそれが何を出力するかを制御できないという方法から来ています。

元のコードは次のとおりです。

public void convertToBytes()
    {
        try
        {
            for(byte binary:Files.readAllBytes(getCompressPath))
            {
                    System.out.println(binary);
            }
        }
        catch(IOException io)
        {
            System.out.println("An IO exception occured.");
        }
        catch(OutOfMemoryError noMemory)
        {
            System.out.println("Out of heap memory");
        }
    }//End of Method.

forループでループをネストしようとしました。また、次のように ByteBuffer クラスを使用してみました。

public void convertToBytes()
{
    try
    {
        ByteBuffer b = ByteBuffer.allocate(10);
        b.put(Files.readAllBytes(getCompressPath()));
        for(byte binary:b.array())
        {
                System.out.println(binary);
        }
    }
    catch(IOException io)
    {
        System.out.println("An IO exception occured.");
    }
    catch(OutOfMemoryError noMemory)
    {
        System.out.println("Out of heap memory");
    }
}//End of Method.

私がすることはすべて、メモリ不足エラーを引き起こし続けます。

4

2 に答える 2

2

ファイル全体を一度に読み取らないでください。 a を開いてメソッドをFileInputStream呼び出して、一度read()に 1 バイトずつ取得します。

于 2013-11-09T20:01:10.073 に答える
1

正確に何をしたいですか?バイトを出力するだけですか?したがって、バッファなしで読み取り中にそれらを印刷します。

一般に...これらすべてのバイトをメモリにロードする必要がありますか? もしそうなら、あなたにはチャンスがあります:あなたが必要です

  • より多くのメモリ
  • -Xms および -XmVM 設定を調整する
于 2013-11-09T20:01:09.383 に答える