3

如果邮件发送到我的收件箱,我会收到一条消息,然后我会将内容插入 DB。我有一个 org.springframework.integration.core.Message 如下所示:

public void receive(Message<?> message)
{
    //I am inserting message contents into DB
}

现在万一发生故障,我想有故障安全恢复机制,我在想的是将 Message 对象序列化为一个文件,然后反序列化并更新到 DB。

问题 1、这种情况下如何序列化Message对象?2. 除了序列化,还有什么其他的机制可以使用?

编辑 我之前没有做过序列化,我听说这个类应该实现 Serializable 才能使用 ObjectOutputStream,在这种情况下我不想创建 Message 的子类,那么如何将 Message 序列化为 File?

4

3 回答 3

7

当然,除了 jvm 之外,还有许多序列化机制。

  • XML
  • JSON
  • BSON
  • 消息包
  • protobufs
  • ...

其中一些是基于文本的,一些是二进制的。都有缺点和优点。基于文本的那些是人类可读的,二进制的更快并且占用更少的空间。

有处理上述所有格式的 java 库:JAXB (XML)、Jackson (JSON) 等。

于 2013-01-03T07:50:23.713 回答
1

这种情况下如何序列化Message对象呢?除了序列化还有其他可以使用的机制吗?

从消息中提取您需要的所有数据并保存。您可以选择任何方式执行此操作。

您可以通过使用您保存的数据填充新消息来反序列化它。

于 2013-01-03T08:53:31.477 回答
-1

我不知道我是否理解它好吧..但假设 Message 不仅仅是很多字符串和一些整数,您可以直接使用 ObjectOutputStream 并将其写入文件(二进制),然后稍后再读。为什么不?

Message e = new Message();
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("whatever");
oos.writeObject(message);

// read in
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("whatever");
Message e = (Message) ois.readObject();
于 2013-01-03T08:01:27.477 回答