对象输出和输入问题,只打印输入的第一行

问题描述:

我正在为一个班级制作聊天服务器,并且正在为离线用户提供问题日志记录消息。数据作为对象追加到日志文件中,随着日志记录的增多,数据量也随之增加。当我作为收到消息的用户登录时,它只会返回发送的第一条消息。我花了很多时间,这可以不知道我错过了什么。对象输出和输入问题,只打印输入的第一行

输入:

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

我不认为你可以追加到这样一个ObjectOutputStream。我认为这是可能的,如果你这样做:

对于输出,继续附加消息,你现在要做的。

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

ObjectInputStream可能会消耗不属于它的数据。

+0

我不确定如何获取一个字节输入并将其包装到ObjectInputStream中。有关于此的任何提示? – Joshua

+0

你正在做它,FileInputStream是一个InputStream的字节。只是让你处理它。 –