Десериализовать MimeMessages JavaMail - PullRequest
0 голосов
/ 07 сентября 2011

Добрый день в моем часовом поясе.

Я работаю с JavaMail API с exJello Provider.Я использую класс SearchTerm для фильтрации извлеченных сообщений, но в среднем метод поиска занимает более 1 минуты, чтобы результаты возвращали результаты. Поэтому я решил сериализовать набор сообщений таким образом, мне не пришлось ждать так долго.теоретическая проблема и одна конкретная проблема.1) Только классы, которые реализуют интерфейс Serializable, могут быть сериализованы, поэтому способ, которым я использую «сериализацию» этих сообщений, не является «действительно» сериализацией, верно?Фрагмент моего кода: message.writeTo ("OutputStream"); ​​

2) Теперь проблема, с которой я имею дело: Фрагмент кода:

  messages = inbox.search(new AndTerm(terms));
  ObjectOutputStream stream = new ObjectOutputStream(new  FileOutputStream("serializer.txt"));
   for(Message msg : messages){
      msg.writeTo(stream);
    }

В конце процессая должен был сериализовать более одного сообщения в файле "serializer.txt".Мой вопрос заключается в том, как я могу десериализовать эти сообщения. Я уже могу десериализовать одно сообщение, но если файл содержит более одного сообщения, десериализуется только первое.Код:

ObjectInputStream file = new ObjectInputStream(new FileInputStream("serializer.txt"));
new MimeMessage(session,file);

Этот код десериализует только одно сообщение, но если я сделаю цикл, только первый снова будет десериализован.Поэтому любое тело сталкивалось с той же проблемой.PS-> Если я попытаюсь использовать метод readObject из любого InputStream, он получит исключение, единственный способ - использовать конструктор сообщений.

С наилучшими пожеланиями

Ответы [ 2 ]

0 голосов
/ 08 сентября 2011

Вы можете попробовать ObjectInputStream.readObject ()

ObjectInputStream messages= new ObjectInputStream(new FileInputStream("serializer.txt"));
while(messages.available()){
   MimeMessage message = (MimeMessage)messages.readObject()
   ....
}
0 голосов
/ 07 сентября 2011

Вы можете использовать либо сериализуемый, либо внешний интерфейс для сериализации.Serializable - это маркерный интерфейс, и Java сделает сериализацию за вас.Если вы используете externalizable, вы можете написать свой собственный метод сериализации.

Если мы пойдем в соответствии с определением сериализации, то то, что вы делаете, можно назвать сериализацией.Потому что вы записываете свой объект в файл и можете восстановить его.

В области компьютерных наук в контексте хранения и передачи данных сериализация - это процесс преобразования структуры данных или объектасостояние в формате, который может быть сохранен (например, в буфере файла или памяти, или передан по каналу сетевого подключения) и позднее «воскрешен» в той же или другой компьютерной среде.

Дляследующая часть :: не записывать все сериализованные объекты в один файл.Создайте файл динамически для каждого сериализованного объекта.Используйте структуру имен для определения правильного файла, который вы хотите десериализовать, и это решит вашу проблему

...