当前位置: 首页 > 知识库问答 >
问题:

从文件中读取字节时的异常

逑阳泽
2023-03-14

我正在尝试制作一个十六进制转储应用程序,为此,我需要读取文件字节。我正在使用ApacheIO版本2.8.0来进行十六进制转储。这是我正在使用的代码:

     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            try {
                byte[] bytes = Files.readAllBytes(Paths.get(getPackageManager().getApplicationInfo("com.pixel.gun3d", 0).nativeLibraryDir.concat("/libil2cpp.so")));
                Log.e("MainActivity", dumpHex(bytes));
            } catch (PackageManager.NameNotFoundException | IOException e) {
                e.printStackTrace();
            }
        }

    private String dumpHex(byte[] bytes) {
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        try {
            HexDump.dump(bytes, 0, out, 0);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return new String(out.toByteArray());
    }

我得到的错误是:java.lang.OutOfMemoryError:未能分配155189264字节分配25165824空闲字节和94MB,直到OOM,最大允许占用空间328602112,增长限制402653184我查了一下,没有任何建议尝试如添加android: largeHeap="true"android: hardware Accelerated="false"到清单工作。任何帮助都很感激

共有1个答案

戎劲
2023-03-14

在读取文件时,建议将读取的内容分成小块,以避免此类错误。将整个文件字节读入字节数组有局限性,例如文件大小超过整数。最大值你将得到一个OutOfMemoryException。

尝试做类似的事情:


byte[] buffer = new byte[1024];
FileInputStream fis = new FileInputStream(file);
int readBytesNum = fis.read(buffer);
while (readBytesNum > 0)
{
    //do what you need
    readBytesNum = in.read(buffer);
}

这意味着您需要更改HexDump的实现来处理分区中的文件

 类似资料:
  • 问题内容: 请看下面的代码 在这里,首先获取文件的字节,然后将其写入文本文件。然后,我阅读了该文本文件,逐行阅读,并为每一行生成了一个单独的.txt文件。现在,原始程序被拆分为数千个文件。现在,我需要阅读所有.txt文件并重新生成.txt文件。我不知道怎么做最后一件事。我怎样才能做到这一点?请帮忙! 问题答案: 如果要操作任何类型的文件,请不要认为它们包含文本数据,而应将它们视为包含字节的二进制文

  • 问题内容: 我正在使用Java在Linux EXTREME VPS上存储图像 当我将其存储在服务器路径上时 使用以下代码读取路径 当我使用上面的代码阅读时,我得到以下异常 如何解决这个问题呢? 还有其他从Linux服务器读取文件的方法吗? 问题答案: 我认为问题在于您使用的文件路径错误。 您说您正在Linux服务器上读取文件,似乎您正在尝试在Windows计算机上读取文件。由此推断,您已将Linu

  • 我正在寻找一种在读取字节(作为字节[])和从文件中读取字符串行之间切换的方法。我知道字节[]可以通过FileInputStream从文件中获取,字符串可以通过BufferedReader获取,但同时使用这两个字节是有问题的。我知道字节段有多长。当我写文件时,字符串编码可以保持不变。该文件类型是一个仍在开发中的自定义文件类型,因此我可以更改向其写入数据的方式。 我怎么能读取字符串和字节[]s从相同的

  • 问题内容: 我正在尝试在Android应用程序中获取文件内容(以字节为单位)。我已经在SD卡中获取了文件,现在想获取选定的文件(以字节为单位)。我用谷歌搜索,但没有成功。请帮忙 以下是获取带有扩展名的文件的代码。通过这个,我得到文件并显示在微调器中。在文件选择上,我想以字节为单位获取文件。 问题答案: 这很简单: 在manifest.xml中添加权限:

  • 需要帮助修复此错误。我试图打印出字符串国家名称的数组长度。 我从一个简历文件阅读,我一直得到上面的错误。下面是我的代码: 下面是我的TestCSV类文件: 我的csv文件如下所示:这是一个摘要,因为我不想打印出全部252个国家。基本上,我把252个国家的数据存储在一个字符串数组中,年份存储在一个整数数组中,每个国家的蜂窝数据统计数据存储在一个二维双数组中。我是编程新手,我想知道我的方向是否正确,如

  • 本文向大家介绍Java中的字节流文件读取教程(二),包括了Java中的字节流文件读取教程(二)的使用技巧和注意事项,需要的朋友参考一下 接着上篇文章,我们继续来学习 Java 中的字节流操作。 装饰者缓冲流 BufferedInput/OutputStream 装饰者流其实是基于一种设计模式「装饰者模式」而实现的一种文件 IO 流,而我们的缓冲流只是其中的一种,我们一起来看看。 在这之前,我们使用