2011-09-14 57 views
2

我需要将数百万个Java POJO写入磁盘,并从磁盘读取它们,并且需要快速完成。最简单的方法来序列化相对简单的Java POJO?

我宁愿避免必须定义一个单独的模板文件,因为我认为这是与Thrift和Google协议缓冲区一起需要的。相反,如果Java类本身是对象的权威性规范(与Java序列化,Gson和其他序列化协议一样),那将是更可取的。我意识到这里可能会有一些性能受到影响,但它的好处是它的速度慢了一点。

要序列化的类包含几个简单的long和String字段,以及一个Map(其中此映射中的值都是Numbers或Strings)。

任何人都可以提出一些我应该看看的库吗?

+0

您是否测量了本地Java序列化并发现它不够快?你有什么时间,什么时候想要? –

+0

没有一个真正的门槛高于哪个门槛,低于哪个门槛是不好的。越快越好。本机序列化可能没问题,我只是想知道是否有一些通常理解的更快的方法。 – sanity

+0

重新您的“这将是更可取的...” - 我有一个.NET版本的protobuf,将以这种方式工作(代码优先),但不是Java;如果它适用于某些后来的读者(见:protobuf-net) –

回答

4

先用Java序列化测试,看看它是否足够快。 它是内置的,并足以胜任处理图形和多个版本。

除非您知道需要替代品,否则没有理由寻找替代品。

编辑:您将需要重置()ObjectStream,为了不填充查阅表引用已写入的对象。如果你正在编写相对独立的对象,那么在每个“顶级”对象之后进行重置可能不是问题,但如果你的数据中有复杂的关系,我建议你尝试JPA或其他的东西。

+0

对于一个简单的对象。本地序列化足够好。 +1用于简单的直接回答。 –

+0

有很多更快的方法,但越快越好,开发人员越复杂。你的时间也很重要。 ;) –

+0

这不是非常快速:我的笔记本在29,85300秒内写了100000个数据对象,每个对象包含一个包含10个字符串的映射和5个附加字符串。共约1 500 000件左右。阅读速度更快,需要5秒钟才能读完所有内容。 – KarlP