java - ObjectInputStream - 如何等待新数据?

标签 java android multithreading sockets objectinputstream

我正在制作一个客户端-服务器应用程序,但在读取服务器上的对象时遇到了一些麻烦。

在我的服务器连接到客户端套接字后,我构建对象输入和输出流并将它们传递到我的 service() 方法。在那里,我应该处理来自客户端的不同类型的消息。我可以从客户端(即我设计的 Message 对象)获取一条消息就好了。但当然,我想做的是有一个循环,这样我就可以获取消息、处理它并回复。

到目前为止,我的代码仅适用于单个消息。当我添加我的循环时,每次迭代都会发生什么,我的服务器只是在我的客户端有机会通过套接字发送新消息之前一遍又一遍地读取相同的消息(我认为这是正在发生的事情,至少) .

所以我真正需要做的是弄清楚如何让我的 service() 方法等待新的输入。有任何想法吗?或者我接近这个错误?我是否需要在每次迭代时创建一个新的 OIS 或者...?一些代码:

public void service(ObjectInputStream input, ObjectOutputStream output) throws IOException, Exception {

    _shouldService = true;

    while (_shouldService) {
                    // It just keeps reading the same message over and over
                    // I need it to wait here until the client sends a new message
                    // Unless I'm just approaching this all wrong!
        NetworkMessage message = (NetworkMessage) input.readObject();

        NetworkMessageHeader header = message.getHeader();

        String headerType = header.getType();

        if (headerType.equals(NetworkMessageHeader.NetworkMessageHeaderTypeConnect)) {
            doLoginForMessage(message, output);
        } else if (headerType.equals(NetworkMessageHeader.NetworkMessageHeaderTypeFiles)) {
            doFilesList(message, output);
        } else {
            System.out.println("Unrecognized header type: " + headerType);

        }
    }
}

最佳答案

ObjectOutputStream 缓存对象表示,并且不会检测您是否从客户端一遍又一遍地重新发送相同的实例,但其中有更改。如果这是您的情况,您需要在每次发送之前对流调用 reset

NetworkMessage message = new NetworkMessage();
for(;;) {
  message.setProperty(whatever);
  oos.reset();
  oos.writeObject(message);
}

关于java - ObjectInputStream - 如何等待新数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9386571/

相关文章:

java - 如何正确中断android中的线程

java - 更改日期

java - 具有多个属性的 Jax-ws Enum

android - 为什么文本文件的编码从 UTF-8 更改为 ANSI(以及如何解决这个问题)?

android - 查看是否设置了不同的主屏幕和锁屏壁纸

java - 等待服务返回的坏习惯?

java - 从字符串创建对象并在同步块(synchronized block)中用作监视器

java - 如何在项目目录中包含 swagger 生成的类

java - 根据行数据从表行中提取值 - JSoup

java - Android 动画 startOffset 损坏或错误?