Java:ObjectInputStream,发送3条消息,只收到2条消息

时间:2017-04-20 18:03:10

标签: java android sockets networking serialization

欢迎来到神话般的网络世界。我发现了自己的激情。 :) 但是我的应用程序中有一个非常奇怪的行为,我需要你的帮助来解决这个问题。

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

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个第一个。如果我改变订单并不重要。第三个总是丢失。

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

1 个答案:

答案 0 :(得分:-1)

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

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

您可以使用BufferedInputStream的大小并且buffer的读取速度很慢,因此请稍微发送数据 `