Scanner.nextLine () blockiert bei Verwendung von InputStream from Socket

Wenn ich Daten mit empfangeSocket.getInputStream() Direkt (ohne irgendeine Schnittstelle wie Scanner) blockiert es nicht. Aber wenn ich versuche, einen Scanner zu verwenden (ähnlich wie wir Strings von erhalten)System.in), es tut. Ich habe mich gefragt, warum dies so ist und inwiefern sich der InputStream, den ein angeschlossener Socket an Sie liefert, von dem unterscheidetInputStream in imSystem.

Der zum Testen verwendete Client (für beide Server verwendet)

Der Code, der hängt:

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

Der Code, der nicht blockiert:

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

Antworten auf die Frage(1)

Ihre Antwort auf die Frage