Quale sottotipo 'InputStream' è usato dall'oggetto tipo 'Socket' qui?

0

Nel programma socket del server sottostante, l'oggetto flusso di byte viene utilizzato per leggere i dati dal client, come menzionato - InputStream in = socket.getInputStream();

public class SingleThreadTCPServer{
    ServerSocket serverSocket;
    int serverPort = 3333;

    public SingleThreadTCPServer(){
        try{
            serverSocket = new ServerSocket(serverPort);
            System.out.println("ServerSocket: " + serverSocket);
        }catch(IOException e){
            e.printStackTrace();
        }
    }

    private void listen(){
        try{
            while(true){  //run until you terminate the program
                //Wait for connection. Block until a connection is made.
                Socket socket = serverSocket.accept();
                System.out.println("Socket: " + socket);
                InputStream in = socket.getInputStream();
                int byteRead;
                //Block until the client closes the connection (i.e., read() returns -1)
                while((byteRead = in.read()) != -1){
                    System.out.println((char)byteRead);
                }
            }
        }catch(IOException ex){
            ex.printStackTrace();
        }

    }

    public static void main(String[] args){
        new SingleThreadTCPServer().listen();
    }
}

Avevo passato all'implementazione del metodo getInputStream() ma non riuscivo a capire il sottotipo effettivo di InputStream oggetto che è effettivamente restituito da getInputStream()

Tra i sottotipi sottostanti,

Qual è il tipo di flusso effettivo che viene utilizzato dal server per leggere i dati dal client?

    
posta overexchange 21.12.2014 - 19:06
fonte

2 risposte

2

Non c'è alcuna ragione intrinseca per credere che quelli siano gli unici sottotipi di InputStream. Sono solo gli unici descritti in precedenza dal linguaggio Java. L'implementazione del socket può utilizzare qualsiasi sottotipo. È un dettaglio di implementazione che non è specificato.

    
risposta data 21.12.2014 - 19:15
fonte
1

Questo è un oggetto nativo, è (probabilmente) implementato in C ++. Non è possibile scrivere qualcosa di simile in Java poiché Java non espone direttamente il proprio ambiente esterno. Puoi comunque associare funzioni scritte in altre lingue utilizzando l'interfaccia Java Native .

Fare tutto questo da solo sarebbe molto lavoro, quindi fortunatamente il J ava R untime E nvironment ha già implementato queste interfacce per te. Ciò consente di trattarli come oggetti Java standard senza doversi preoccupare di come funzionano nella pratica. Se vuoi davvero saperne di loro, devi imparare il C ++.

    
risposta data 22.12.2014 - 10:11
fonte

Leggi altre domande sui tag