如何在不实现Serializable接口的情况下序列化/反序列化对象?
如果邮件发送到我的收件箱,我会收到一条消息,然后我将内容插入到数据库中。 我有一个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?
当然,除了jvm之外,还有许多序列化机制。
- XML
- JSON
- BSON
- MessagePack
- protobufs
- …
其中一些是基于文本的,一些是二进制的。 都有缺点和优点。 基于文本的文本是人类可读的,二进制文件更快,占用的空间更少。
有一些java库可以处理所有上述格式:JAXB(XML),Jackson(JSON)等。
在这种情况下如何序列化Message对象? 除序列化之外还有其他可以使用的机制吗?
从消息中提取所需的所有数据并保存。 您可以以您选择的任何方式执行此操作。
您可以通过使用保存的数据填充新消息来反序列化它。
我不知道我是否理解它是正确的..但假设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();