0

私のタイムゾーンでこんにちは。

exJelloプロバイダーでJavaMailAPIを使用しています。SearchTermクラスを使用して取得したメッセージをフィルタリングしていますが、検索メソッドが結果を返すまでに平均1分以上かかるため、この方法で一連のメッセージをシリアル化することにしました。それほど長く待つ必要はありませんでした。理論上の問題と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」で複数のメッセージをシリアル化しました。私の質問は、これらのメッセージをどのように逆シリアル化できるかです。すでに1つのメッセージを逆シリアル化できますが、ファイルに複数のメッセージが含まれている場合は、最初のメッセージのみが逆シリアル化されます。コード:

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

このコードは1つのメッセージだけを逆シリアル化しますが、シクルを作成すると、最初のメッセージだけが再び逆シリアル化されます。したがって、どの体も同じ問題に直面していました。PS-> InputStreamからメソッドreadObjectを使用しようとすると、例外が取得されます。唯一の方法は、Messageコンストラクターを使用することです。

どうぞよろしくお願いします

4

2 に答える 2

0

シリアル化には、serilizableまたはexternalizableインターフェースのいずれかを使用できます。Serializableはマーカーインターフェイスであり、Javaがシリアル化を行います。外部化可能を使用する場合は、独自のシリアル化メソッドを作成できます。

シリアル化の定義に従って進むと、実行していることをシリアル化と呼ぶことができます。Cozは、オブジェクトをファイルに書き込んでいて、そこから復元することができます。

コンピュータサイエンスでは、データの保存と送信のコンテキストでは、シリアル化とは、データ構造またはオブジェクトの状態を、保存可能な形式に変換するプロセスです(たとえば、ファイルやメモリバッファに保存したり、ネットワーク接続リンクを介して送信したりします)。 )そして後で同じまたは別のコンピュータ環境で「復活」します。

次の部分では::すべてのシリアル化されたオブジェクトを同じファイルに書き込まないでください。シリアル化されたオブジェクトごとに動的にファイルを作成します。希望する正しいファイルを識別するための命名構造を使用してください。これにより、問題が解決します。

于 2011-09-07T18:18:11.433 に答える
0

ObjectInputStream.readObject()を試すことができます

ObjectInputStream messages= new ObjectInputStream(new FileInputStream("serializer.txt"));
while(messages.available()){
   MimeMessage message = (MimeMessage)messages.readObject()
   ....
}
于 2011-09-07T22:30:12.513 に答える