欢迎来到神话般的网络世界。我发现了自己的激情。 :) 但是我的应用程序中有一个非常奇怪的行为,我需要你的帮助来解决这个问题。
我制作了一个简单的服务器 - 客户端应用程序。 发送线程:
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 :(得分:-1)
BufferedReader缓冲输入,就像名称所示。这意味着它在将输入源传递给您之前从输入源读取到缓冲区。这里的缓冲区大小是指它缓冲的字节数。
ObjectInputStream objectInputStream = new ObjectInputStream(new BufferedInputStream(socket.getInputStream(), size));
您可以使用BufferedInputStream
的大小并且buffer
的读取速度很慢,因此请稍微发送数据
`