反序列化MIMessages JavaMail

反序列化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

下午好,在我的时区

我正在与exJello提供者一起使用JavaMail api。我使用SearchTerm类来过滤检索到的消息,但搜索方法返回结果平均需要1分钟以上。因此,我决定以这种方式序列化一组消息,而不必等待太久。因此,我有一个理论问题和一个指定问题。 1只有实现Serializable接口的类才能序列化,所以我用来序列化这些消息的方法不是真正的序列化,对吗? 我的代码片段:message.writeToOutputStream

2现在我要处理的问题是: 代码片段:

  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()
   ....
}