Java 打印字节时的内存

Java 打印字节时的内存,java,Java,现在我正在尝试从文件中打印字节,它在小文件中运行良好,但是当我使用千兆字节范围的文件时,我会收到一个异常,说“OutOfMemoryError请求的数组大小超过VM”,通常我会使数组变小,但这是来自I方法,我无法控制它的输出 以下是原始代码: public void convertToBytes() { try { for(byte binary:Files.readAllBytes(getCompressPath))

现在我正在尝试从文件中打印字节,它在小文件中运行良好,但是当我使用千兆字节范围的文件时,我会收到一个异常,说“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.

我所做的一切都会导致outofmemory错误

你到底想做什么?只是打印字节?因此,在阅读时打印它们,而无需任何缓冲区

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

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

    • 你到底想做什么?只是打印字节?因此,在阅读时打印它们,而无需任何缓冲区

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

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

        • 你到底想做什么?只是打印字节?因此,在阅读时打印它们,而无需任何缓冲区

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

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

            • 你到底想做什么?只是打印字节?因此,在阅读时打印它们,而无需任何缓冲区

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

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

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

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

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

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

              该方法只有一个问题,即它不返回字节值。如果我读到一个写着“abc”的文本文件,我应该得到97,98,99,10你在调用无参数版本的
              read()
              ,对吗?如果可以从文件中读取字节,则返回0到255之间的
              int
              值(即无符号字节值),如果没有更多字节,则返回-1。因此,如果在包含
              abc
              和Unix行终止符的四字节文件上连续调用五次,它应该返回97、98、99、10和-1。该方法只有一个问题,即它不返回字节值。如果我读到一个写着“abc”的文本文件,我应该得到97,98,99,10你在调用无参数版本的
              read()
              ,对吗?如果可以从文件中读取字节,则返回0到255之间的
              int
              值(即无符号字节值),如果没有更多字节,则返回-1。因此,如果在包含
              abc
              和Unix行终止符的四字节文件上连续调用五次,它应该返回97、98、99、10和-1。该方法只有一个问题,即它不返回字节值。如果我读到一个写着“abc”的文本文件,我应该得到97,98,99,10你在调用无参数版本的
              read()
              ,对吗?如果可以从文件中读取字节,则返回0到255之间的
              int
              值(即无符号字节值),如果没有更多字节,则返回-1。因此,如果在包含
              abc
              和Unix行终止符的四字节文件上连续调用五次,它应该返回97、98、99、10和-1。该方法只有一个问题,即它不返回字节值。如果我读到一个写着“abc”的文本文件,我应该得到97,98,99,10你在调用无参数版本的
              read()
              ,对吗?如果可以从文件中读取字节,则返回0到255之间的
              int
              值(即无符号字节值),如果没有更多字节,则返回-1。因此,如果在包含
              abc
              和Unix行终止符的四字节文件上连续调用五次,它应该返回97、98、99、10和-1。