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

不要一次读取整个文件 - 打开 aFileInputStream并调用该read()方法一次获取一个字节。

于 2013-11-09T20:01:10.073 回答
1

你到底想做什么?只是打印出字节?因此,在阅读时打印它们,根本没有任何缓冲区。

一般来说......你需要在内存中加载所有这些字节吗?如果是这样,你就有机会:你需要

  • 更多内存
  • 调整 -Xms 和 -Xmx 虚拟机设置
于 2013-11-09T20:01:09.383 回答