对象输出和输入问题,仅打印输入的第一行
我正在为班级制作聊天服务器,但在为离线用户记录消息时遇到问题。数据作为对象附加到日志文件,随着您记录的越多,数据的大小就会增加。当我以收到消息的用户身份登录时,它仅返回发送的第一条消息。我花了很多时间在这上面无法弄清楚我错过了什么。
输入:
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");
}
}
I'm making a chat server for a class and am having issue logging messages for offline users. The data appends to the logfile as an object, it grows in size as you log more. When I login as the user who received a message it only returns the first message sent. I've spent a lot of time with this can can't figure out what I'm missing.
The input:
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");
}
The Output:
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");
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我不认为你可以像这样附加到 ObjectOutputStream 。我认为如果您这样做是可能的:
对于输出,请像现在一样继续附加消息。
对于输入,将文件作为字节输入流打开。将其包装在 ObjectInputStream 中。当该对象输入流没有更多数据时,丢弃它,检查原始字节输入流是否有更多数据,如果有更多数据,则创建一个新的 ObjectInputStream 并从中读取数据。重复直到字节输入流中不再存在数据。
ObjectInputStream 使用不属于它的数据可能会出现问题。
I don't think you can just append to an ObjectOutputStream like that. I think it would be possible if you do this:
For output, keep appending messages as you do now.
For input, open file as a byte input stream. Wrap this in a ObjectInputStream. When that object input stream has no more date, discard it, check the original byte input stream for more data, if it has more, then create a new ObjectInputStream and read data from that. Repeat until no more data exists in byte input stream.
There might be issues with ObjectInputStream consuming data not belonging to it.