现在我正在尝试从文件中打印字节,它在小文件中工作正常,但是当我使用千兆字节范围内的文件时,我得到一个异常,说“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.
我做的每件事都会导致失败的错误。
答案 0 :(得分:2)
不要一次读取整个文件 - 打开FileInputStream
并调用read()
方法一次获取一个字节。
答案 1 :(得分:1)
你究竟想做什么?只打印字节?所以在没有任何缓冲的情况下阅读时打印它们。
一般来说......你需要在内存中加载所有这些字节吗?如果是这样,你有机会:你需要