Ну, пожалуйста, см. Вопрос this и первый ответ Джона Скита.Почему новый InputStream все еще будет читать то, что осталось от старого InputStream?
На этот раз у меня есть этот сервер:
public class SimpleServer {
public static void main(String[] args) throws Exception {
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("Server Socket created, waiting for client...");
Socket accept = serverSocket.accept();
InputStreamReader inputStreamReader = new InputStreamReader(accept.getInputStream());
char[] chars = new char[5];
System.out.println("Client connected, waiting for input");
while (true) {
inputStreamReader.read(chars,0,chars.length);
for (int i=0;i<5;i++) {
if(chars[i]!='\u0000') {
System.out.print(chars[i]);
}
}
inputStreamReader = new InputStreamReader(accept.getInputStream());
chars = new char[5];
}
}
}
И когда я посылаю символы «123456789» от клиента, это то, что я точно вижу в терминале Сервера, но я не должен видеть только 12345 ?
Почему разница в поведении?
Спасибо за ответ, на этот раз я увижу: «123678» на выходе терминалов серверов. 4 и 5 потеряно, но он все еще может читать 678 .. Очень запутанно для меня .. –
@KorayTugay: Это потому, что 4 и 5 были в первом «пакете» данных, отправленных с клиента на сервер, и были прочитаны в буфера первого 'InputStream'. 6789 были отправлены в следующем пакете, поэтому они не были прочитаны (как это бывает) первым читателем и все еще «в» потоке. –
Спасибо большое, понял. –