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();
        }
    }
}

Ответы на вопрос(1)

Ваш ответ на вопрос