在java中从xml解码大型base64:OutOfMemory

2024-01-20

我需要将 xml 文件的 base64 编码元素写入单独的文件中。问题:文件的大小很容易达到 100 MB。我尝试的每个解决方案都以“java.lang.OutOfMemoryError:Java堆空间”结束。问题不在于一般的读取xml或解码过程,而在于base64块的大小。

我使用 jdom、dom4j 和 XMLStreamReader 来访问 xml 文件。但是,一旦我想访问相应元素的 base64 内容,我就会收到上述错误。我还尝试使用 saxon 的 base64Binary-to-octets 函数进行 xslt,但结果当然是相同的。

有没有一种方法可以将这个 Base64 编码部分流式传输到文件中,而无需将整个块分成一个部分?

谢谢你的提示,

Andreas


Apache 通用编解码器 http://commons.apache.org/codec/ has a Base64OutputStream http://commons.apache.org/codec/api-release/org/apache/commons/codec/binary/Base64OutputStream.html,这应该允许您通过链接以可扩展的方式提供 XML 数据Base64OutputStream with a FileOutputStream.

您需要将 XML 表示为字符串,因此您甚至可能根本不需要将其读入 DOM 结构。

就像是:

PrintWriter printWriter = new PrintWriter(
   new Base64OutputStream(
      new BufferedOutputStream(
         new FileOutputStream("/path/to/my/file")
      )
   )
);
printWriter.write(myXml);
printWriter.close();

如果输入 XML 文件太大,那么您应该循环将其块读入缓冲区,并将缓冲区内容写入输出(即标准的读取器到写入器副本)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在java中从xml解码大型base64:OutOfMemory 的相关文章

随机推荐

  • 在每个应用程序的事件循环迭代上执行槽

    如何在应用程序事件循环的每次迭代中调用我的槽 我知道的唯一方法是使用 QTimer 并且在每次超时 每毫秒 信号时我可以调用我的插槽 但我不喜欢这个选项 它看起来像是解决方法 有什么建议如何更正确地做到这一点 来自 Qt 4 7 QCore
  • META“过期”标签

    因此 使用 FF 中的 pagespeed 我能够找到一些关于如何减少页面加载时间的区域 其中提到的部分使用 META 过期 标签 它列出了我的所有 CSS 和 JS 文件以及 IMG 文件 现在 如果我只是将此标记合并到我网站的主页 in
  • Java - “\n”是什么意思? [复制]

    这个问题在这里已经有答案了 我用 Java 创建了一个二维数组 我正在寻找一种在控制台上打印它的方法 以便我可以确认我正在制作的东西是正确的 我在网上找到了一些为我执行此任务的代码 但我对代码的特定部分的含义有疑问 int n 10 int
  • 在 ClearCase 中手动撤消交付

    我目前在 ClearCase 中从子流到父级的传输被提升 如果我尝试撤消交付 它会告诉我不能 因为 集成活动已签入 或 签入版本 如果我尝试恢复交付 它会说尝试签出或合并元素时遇到错误 但没有具体告诉我是哪一个 所以我正在寻找一种方法 手动
  • Ping google 关于分页站点地图 django

    I have sitemap xml有 150k 行 我正在使用分页 所以有sitemap xml p 1 sitemap xml p 2 etc 我应该如何使用 Django 向 Google 告知这些页面 或者谷歌会发现sitemap
  • 删除常规数组的元素

    我有一个 Foo 对象数组 如何删除数组的第二个元素 我需要类似的东西RemoveAt 但对于常规数组 如果您不想使用列表 var foos new List
  • 在Python中使用正则表达式解析PDF文件

    我正在尝试使用 Python 的 re 模块解析 PDF 文件中的一些对象元素 我的目标是使用正则表达式解析每个 PDF 对象 PDF 对象示例如下 1 0 obj lt lt Type Catalog Pages 2 0 R gt gt
  • Java char 数组转int

    是否可以转换char 包含数字的数组 一个int 是否char 包含组成数字数字的 unicode 字符 在这种情况下 只需从char 并使用 Integer parseInt char digits 1 2 3 int number In
  • 如何在android中使用volley下载视频文件?

    我想使用 volley 库下载视频 我正在使用 volley 库来处理应用程序中的所有网络调用 首先 我们需要创建一个扩展 Volley Request 类的自定义类 要下载文件数据 我们可以创建自定义字节数组请求 该字节数组可以转换为输入
  • 模板类的编译时计数器

    想象一下 您有很多带有很多不同模板参数的类 每个类都有一个方法static void f 你想将所有这些函数指针收集到一个列表 L 中 运行时解决方案很简单 typedef void p std vector p L int reg p x
  • AnTLR4 C# 中的解析树

    我目前正在使用针对 C 的 AnTLR4 创建语法 但在开发访问者时遇到问题 我找不到书中提到的 ParseTree 类 书中我们有 LabeledExprLexer lexer new LabeledExprLexer input Com
  • 只读 mutableStateListOf

    在 Jetpack Compose 中 如果我有MutableState变量 我可以将其状态公开为 只读 对其他类的价值为State
  • currentsessioncontext流畅nhibernate怎么办呢?

    我正在尝试根据请求使用流利的会话 我正在遵循 nhibernate 食谱中的 食谱 但它使用 nhibernate 配置文件 我不确定什么更好 但现在我坚持使用流畅的配置 只是因为我不知道如何设置 nhibernate 配置文件以使用流畅的
  • “gcloud app log tail”显示一周前的数据

    我正在尝试流式传输我的 Google Cloud Platform 应用程序的日志 我注意到的第一件事是 Google 每秒至少发送大约 10 次健康检查 所以我必须grep v health以获得任何有用的信息 这是标准吗 第二件事是它传
  • ASP.NET MVC 4 用户身份验证

    我正在尝试编写一个 Login 方法 对用户进行身份验证并授权他们进入使用 ASP NET MVC 4 开发的网站 问题是 尽管我在 Login 方法内验证用户并重定向到 ViewProfile 操作后调用 FormsAuthenticat
  • 使用 getline 跳过空格

    我正在编写一个程序来制作问题表格 这些问题被保存到一个文件中 我想读取它们并将它们存储在内存中 我为此使用向量 我的问题有以下形式 1 TEXT What is your name 2 CHOICE Are you ready for th
  • jQuery Isotope - 多个过滤器的问题

    我尝试在使用 Isotope js 的类似投资组合的页面中使用多个过滤器 请看一下这个页面 http decart design com avancia wp vi tilbyr http decart design com avancia
  • 为什么不能从一个表中删除引用另一个表

    我一直在寻找答案 但也许我错过了一些东西 我有 2 个表 如下所示 第一个表中的实体是从第二个表中引用的 但是当我尝试从第二个表中删除时 我得到Error foreign key mismatch 有触发器 此处未显示 但它们与DELETE
  • 将文件输入和标准输入传递给 gdb

    所以我想在 gdb 中运行一个程序 并将文件的内容作为参数 然后 当遇到 EOF 时 我希望能够再次输入用户输入 对于终端中的普通程序 我可以使用以下命令执行类似的操作 cat input txt cat program 在 gdb 中 我
  • 在java中从xml解码大型base64:OutOfMemory

    我需要将 xml 文件的 base64 编码元素写入单独的文件中 问题 文件的大小很容易达到 100 MB 我尝试的每个解决方案都以 java lang OutOfMemoryError Java堆空间 结束 问题不在于一般的读取xml或解