Scanner.nextLine () блокирует при использовании InputStream из Socket
Когда я получаю данные, используяSocket.getInputStream()
напрямую (без какого-либо интерфейса, такого как сканер), он не блокируется. Но когда я пытаюсь использовать сканер (аналогично тому, как мы получаем строки изSystem.in
), оно делает. Мне было интересно, почему это так, и чем InputStream, который вам предоставляет подключенный Socket, отличается отInputStream in
вSystem
.
Клиент, используемый для тестирования (используется для обоих серверов)
Код, который висит:
public class Server {
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(15180);
Socket socket = ss.accept();
Scanner scanner = new Scanner(socket.getInputStream());
//read data from client
while(true) {
String data = scanner.nextLine();
System.out.println("Received data!");
}
}catch(IOException e) {
e.printStackTrace();
}
}
}
Код, который не блокирует:
public class Server {
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(15180);
Socket socket = ss.accept();
//read data from client
while(true) {
int data = socket.getInputStream().read();
System.out.println("Received data!");
}
}catch(IOException e) {
e.printStackTrace();
}
}
}