2017-04-20 117 views
0

欢迎来到神话般的网络世界。我发现了我的激情。 :) 但是我在我的应用程序中有一个非常奇怪的行为,我需要你的帮助来解决这个问题。Java:ObjectInputStream,发送3条消息,仅收到2条消息

我做了一个简单的服务器客户端应用程序。 发送线程:

new Thread(new Runnable() { 
    public void run() { 
     try { 
      ObjectOutputStream objectOutputStream = new ObjectOutputStream(new BufferedOutputStream(socket.getOutputStream())); 
      objectOutputStream.writeObject(message); 
      objectOutputStream.flush(); 

     } catch (Exception exception) { 
      exception.printStackTrace(); 
     } 
    } 
}).start(); 

接收线程:

new Thread(new Runnable() { 
    public void run() { 
     try { 
      while (!Thread.currentThread().isInterrupted()) { 
       ObjectInputStream objectInputStream = new ObjectInputStream(new BufferedInputStream(socket.getInputStream())); 
       Message message = (Message) objectInputStream.readObject(); 
       Log.i("DEBUG", message); 
      } 
     } catch (Exception exception) { 
      try { 
       socket.close(); 
      } catch (Exception exception) { 
       exception.printStackTrace(); 
      } 
     } 
    } 
}).start(); 

它工作得很好,但是如果我同时发送3个消息,我的接收线程只接收2个第一批。如果我更改订单,这并不重要。第三个总是失败。

我认为这是一个缓冲区大小问题。我该如何处理?谢谢。 :)

+0

你应该使用相同的对象流套接字的生活,你需要如果您要发送或接收多线程,请在套接字上进行一些同步。 – EJP

+0

谢谢你的帮助@EJP。你知道我在哪里可以找到这种结构的例子吗? – Denis

回答

-1

BufferedReader缓冲输入,就像名称所示。这意味着它在将它传递给你之前从输入源读入缓冲区。这里的缓冲区大小是指它缓冲的字节数。

ObjectInputStream objectInputStream = new ObjectInputStream(new BufferedInputStream(socket.getInputStream(), size)); 

可以使用的BufferedInputStream大小和buffer的读数缓慢,有一些延迟发送数据 `

+0

他没有使用'BufferedReader'。最后一句话是毫无意义的。 – EJP