打印字节时的内存

时间:2013-11-09 19:56:20

标签: java

现在我正在尝试从文件中打印字节,它在小文件中工作正常,但是当我使用千兆字节范围内的文件时,我得到一个异常,说“OutOfMemoryError请求的数组大小超过VM”通常我会制作数组较小但这来自I方法,我无法控制它的输出。

这是原始代码:

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.

我做的每件事都会导致失败的错误。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

你究竟想做什么?只打印字节?所以在没有任何缓冲的情况下阅读时打印它们。

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

  • 更多记忆
  • 调整-Xms和-Xmx虚拟机设置