2009-08-25 78 views
0

当前,我们将用户的会话对象序列化到数据库中,但对象最近变化太多,因此我们决定重新设计此过程。我们都同意我们不能序列化整个对象,我们需要逐场保存它。有2项建议,Java序列化:readFields/putFields与序列化映射

  1. 商店所有领域的地图和序列化映射。
  2. 使用ObjectOutputStream.putFields()

我们没有看到这两种方法之间的很大区别。 #1使用熟悉的地图界面,每个人都可以轻松使用。 #2提供了方便的方法,如fields.get("confirmed", false)

我们倾向于去#1。任何人都知道#2的其他好处吗?

回答

1

readFieldsputFields有,你可以开始使用默认的序列,只有当你需要它添加样板的优势。

如果使用一次,Map将产生更小的流,但如果使用readFields/putFields,存储大量这些对象的流将会更小。这是因为描述流格式的一次开销。

注意,你必须拨打defaultReadObject/readFieldsreadObjectdefaultWriteObject/putFieldswriteObject开始启动。不幸的是,这没有检查。

0

根据this网站,您可以通过在您的类中实现两个名为writeObject(ObjectOutputStream)和readObject(ObjectInputStream)的私有方法来自定义值的读写方式。检查上述网站上的会话“自定义默认协议”。这可能是首选方法,如果我没有记错的话,它也是有效Java书中描述的推荐方法。

通过这样做,您可以维护应该在包含字段的类中读取/写入哪些字段的逻辑,这是更好的封装。