反序列化MIMessages JavaMail
下午好,在我的时区 我正在与exJello提供者一起使用JavaMail api。我使用SearchTerm类来过滤检索到的消息,但搜索方法返回结果平均需要1分钟以上。因此,我决定以这种方式序列化一组消息,而不必等待太久。因此,我有一个理论问题和一个指定问题。 1只有实现Serializable接口的类才能序列化,所以我用来序列化这些消息的方法不是真正的序列化,对吗? 我的代码片段:message.writeToOutputStream 2现在我要处理的问题是: 代码片段:反序列化MIMessages JavaMail,java,serialization,jakarta-mail,mime-message,Java,Serialization,Jakarta Mail,Mime Message,下午好,在我的时区 我正在与exJello提供者一起使用JavaMail api。我使用SearchTerm类来过滤检索到的消息,但搜索方法返回结果平均需要1分钟以上。因此,我决定以这种方式序列化一组消息,而不必等待太久。因此,我有一个理论问题和一个指定问题。 1只有实现Serializable接口的类才能序列化,所以我用来序列化这些消息的方法不是真正的序列化,对吗? 我的代码片段:message.writeToOutputStream 2现在我要处理的问题是: 代码片段: messages
messages = inbox.search(new AndTerm(terms));
ObjectOutputStream stream = new ObjectOutputStream(new FileOutputStream("serializer.txt"));
for(Message msg : messages){
msg.writeTo(stream);
}
在这个过程的最后,我在serializer.txt文件中序列化了多条消息。我的问题是如何反序列化这些消息。我已经能够反序列化一条消息,但是如果文件包含多条消息,则只有第一条消息得到反序列化。
代码:
这段代码将只反序列化一条消息,但如果我制作了一个cicle,则只有第一条消息将再次反序列化。因此,任何机构都面临着同样的问题。
PS->如果我尝试从任何InputStream使用readObject方法,它将检索异常,唯一的方法是使用消息构造函数
请注意您可以使用可序列化或可外部化接口进行序列化。Serializable是一个标记接口,java将为您执行序列化。如果使用externalizable,则可以编写自己的序列化方法 如果我们按照序列化的定义进行,那么您所做的可以称为序列化。因为您正在将对象写入一个文件,并且能够从中恢复 在计算机科学中,在数据存储和传输的上下文中,序列化是将数据结构或对象状态转换为一种格式的过程,该格式可以存储在例如文件或内存缓冲区中,或通过网络连接链路传输,然后在同一或另一计算机环境中恢复 对于下一部分::不要在同一个文件中写入所有序列化对象。为每个序列化对象动态创建一个文件。使用命名结构来标识您想要序列化的正确文件,这将解决您的问题您可以尝试
您应该首先了解如何正确使用Java序列化Api。你没有在学习基本概念,也没有在为别人浪费时间。
ObjectInputStream file = new ObjectInputStream(new FileInputStream("serializer.txt"));
new MimeMessage(session,file);
ObjectInputStream messages= new ObjectInputStream(new FileInputStream("serializer.txt"));
while(messages.available()){
MimeMessage message = (MimeMessage)messages.readObject()
....
}