在数据库中存储可序列化对象

时间:2011-02-22 15:52:48

标签: java database serialization

我正在编写一个需要将对象写入数据库的应用程序。

为简单起见,我想序列化对象。

但是出于同样目的所需的ObjectOuputStream只有一个构造函数,它将OutputStream的任何子类作为参数。

应该传递什么参数?

4 个答案:

答案 0 :(得分:8)

您可以传递ByteArrayOutputStream,然后将生成的stream.toByteArray()作为blob存储在数据库中。

请务必为该课程指定serialVersionUID,否则您在添加/删除字段时会遇到困难。

如果您需要更多人类可读的数据,还可以考虑对象序列化的xml版本 - XMLEncoder

最后,您可能希望通过ORM框架将对象模型转换为关系模型。 JPA(Hibernate / EclipseLink / OpenJPA)提供对象关系映射,以便您使用对象,但它们的字段和关系将保留在RDBMS中。

答案 1 :(得分:4)

使用ByteArrayOutputStream应该是一种简单的方法,可以转换为byte[](刷新后调用toByteArray)。或者,有Blob.setBinaryStream(实际上返回OutputStream)。

您可能还想重新考虑将数据库用作数据库......

答案 2 :(得分:2)

e.g。创建ByteArrayOutputStream并将其传递给ObjectOuputStream构造函数

答案 3 :(得分:2)

要添加一件事。 java序列化是一个很好的,通用的工具。但是,它可能有点冗长。您可能想尝试gzipping序列化数据。您可以通过在对象流和字节流之间放置GZIP流来完成此操作。这将使用少量的额外CPU,但这通常是一个值得的权衡,通过网络传输额外的字节并将其推送到数据库中。