【问题标题】:Object output and input issues, only prints the first line on the input对象输出和输入问题,只打印输入的第一行
【发布时间】:2012-01-02 05:55:40
【问题描述】:

我正在为班级制作聊天服务器,但在为离线用户记录消息时遇到了问题。数据作为对象附加到日志文件中,随着您记录的更多,它的大小会增加。当我以收到消息的用户身份登录时,它只返回发送的第一条消息。我花了很多时间来解决这个问题,无法弄清楚我错过了什么。

输入:

 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");
}
}

【问题讨论】:

    标签: java serialization object objectoutputstream objectinputstream


    【解决方案1】:

    我不认为你可以像这样附加到 ObjectOutputStream。我认为如果你这样做是可能的:

    对于输出,请像现在一样继续附加消息。

    对于输入,将文件作为字节输入流打开。将其包装在 ObjectInputStream 中。当该对象输入流没有更多日期时,丢弃它,检查原始字节输入流是否有更多数据,如果有更多数据,则创建一个新的 ObjectInputStream 并从中读取数据。重复直到字节输入流中不再存在数据。

    ObjectInputStream 使用不属于它的数据可能存在问题。

    【讨论】:

    • 我不确定如何获取字节输入并将其包装到 ObjectInputStream 中。有什么建议吗?
    • 你在做,FileInputStream 是字节的 InputStream。只要让你处理它。
    猜你喜欢
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-30
    相关资源
    最近更新 更多