【问题标题】:How to process and save big files with serialization?如何通过序列化处理和保存大文件?
【发布时间】:2016-08-22 12:46:42
【问题描述】:

我想读取一个大文件(它不能作为对象放入堆中)。我必须逐行阅读,处理每一行,然后保存(追加)到一个新文件中。

我完成了第一步(加载和处理)并在控制台上打印输出。我不创建数据对象。 我想我必须即时进行,但我不知道可能有帮助的库。

我还想添加 XML 或 CSV 序列化。
你知道一些可以解决这个问题的库吗?

for (String line; (line = bufferedReader.readLine()) != null; ) {
     String processedNewLine = processLine(Line);
     //and I would like to serialize to XML (append)
     XMLSerialiazer.serialize(processedNewLine, xmlTemp.getPath());

}

【问题讨论】:

  • 你的问题已经回答过了,看这里stackoverflow.com/questions/14037404/…
  • @M.RAshouri 您链接的问题仅针对 csv 文件回答。对 XML 没有用处,因为逐行读取并不能解决问题,有时整个 xml 保存在单行中以节省空间。
  • 您想将每个经过处理的行序列化为 XML 文件吗?为什么?
  • 每个处理的行都应该是一个大 XML 文件的 XML 部分:<line><field1>name</field1>...</line>

标签: java xml csv serialization bigdata


【解决方案1】:

如果您使用 .csv 文件,您只需逐行阅读。没有必要使用特殊的库,您也可以毫无问题地处理非常大的文件。

如果您使用 .xml 文件,则需要 SAX parser。基本上,SAX 解析器是一种对事件(如打开标记、关闭标记)进行操作的解析器,而不是像 DOM 解析器那样在内存中构建整个结构。

【讨论】:

  • 使用 CSV 很简单,但使用 XML 就更复杂了。最后,我将 XML 视为随机访问文件并将新行添加到末尾。它不干净,但非常快。
【解决方案2】:

如果您正在寻找使用可用 XML 序列化库的替代方法,请查看来自 google 的 protocol buffers

Tutorial

Git source

【讨论】:

    【解决方案3】:

    你应该看看Kryo,这是最快的序列化库之一。

    【讨论】:

      猜你喜欢
      • 2015-11-14
      • 1970-01-01
      • 2010-12-28
      • 2016-03-28
      • 1970-01-01
      • 2014-03-09
      • 2017-04-24
      • 1970-01-01
      相关资源
      最近更新 更多