我正在编写一个需要将对象写入数据库的应用程序。
为简单起见,我想序列化对象。
但是出于同样目的所需的ObjectOuputStream只有一个构造函数,它将OutputStream的任何子类作为参数。
应该传递什么参数?
答案 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,但这通常是一个值得的权衡,通过网络传输额外的字节并将其推送到数据库中。