1

クラス用のチャット サーバーを作成していますが、オフライン ユーザーのログ メッセージに問題があります。データはオブジェクトとしてログファイルに追加され、ログを記録するにつれてサイズが大きくなります。メッセージを受信したユーザーとしてログインすると、送信された最初のメッセージのみが返されます。私はこれに多くの時間を費やしてきましたが、何が欠けているのかわかりません。

入力:

 if (exists)
    ObjectInputStream in = null;

    try{
    in = new ObjectInputStream(new FileInputStream(uLog));
    Message msgs;
    Object obj = null;
        while ((obj = in.readObject()) != null)
        {
        msgs = (Message) obj;
        user.writeToUser(new Message("POST", "Offline Message from",  msgs.getTo() +" "+ msgs.getText()));
        }

    in.close();

           }catch (Exception e){//Catch exception if any
  System.err.println("Error: " + e.getMessage());
  }

  boolean success = uLog.delete();

  if (!success)
  throw new IllegalArgumentException("Delete: deletion failed");
  }

出力:

if(!usersList.getUserByName(msg.getTo()).getOnlineStatus())
{
   ObjectOutputStream out;
   try{
   out = new ObjectOutputStream(new FileOutputStream(msg.getTo() + ".log", true));
   user.writeToUser(new Message("PRIVATE", user.getUserName(), msg.getTo(), msg.getText()));
   out.writeObject(new Message("PRIVATE", msg.getTo(), user.getUserName(), msg.getText()));
   out.close();
   }
catch (IOException e){
System.out.println("Exception");
}
}
4

1 に答える 1

1

そのような ObjectOutputStream に追加することはできないと思います。次のようにすれば可能だと思います。

出力については、今と同じようにメッセージを追加してください。

入力の場合、ファイルをバイト入力ストリームとして開きます。これを ObjectInputStream にラップします。そのオブジェクト入力ストリームに日付がなくなったら、それを破棄し、元のバイト入力ストリームにさらにデータがあるかどうかを確認し、さらにデータがある場合は、新しい ObjectInputStream を作成し、そこからデータを読み取ります。バイト入力ストリームにデータがなくなるまで繰り返します。

それに属さないデータを消費する ObjectInputStream に問題がある可能性があります。

于 2011-11-20T11:01:21.663 に答える