web-dev-qa-db-fra.com

Comprendre getInputStream et getOutputStream

Voici un code

import Java.io.*;
import Java.net.*;
public class Whois
{
    public static void main(String[] args)
        throws Exception
    {
        // TODO Auto-generated method stub
        int c;
        Socket s = new Socket("whois.internic.net",43);
        *InputStream in = s.getInputStream();
        *OutputStream out = s.getOutputStream();
        String str = (args.length == 0 ? "osborne.com" : args[0] ) + "\n";
        byte buf[] = str.getBytes();
        *out.write(buf);
        System.out.print("hey baby");
        while ((c=in.read()) != -1)
        {
            System.out.print((char) c);
        }
        s.close();
    }
}

J'ai marqué les énoncés que j'ai du mal à comprendre. Je ne comprends pas quel objet OutputStream out tiendra quand il est assigné à s.getOutputStream() et quel est le besoin de passer de buf à out par out.write(buf).

J'ai appris les flux d'entrée et de sortie à l'aide de fichiers, mais je ne comprends pas getinputstream et outputstreams. Je l'ai googlé, lu ici sur SO ainsi que dans de nombreux ouvrages et documents Oracle. veuillez en discuter en détail.

Je sais comment lire à partir de fichiers et comment y écrire. Mais ici, je ne comprends pas quel est le besoin de passer le tableau buf qui ne contient qu'un string.ce que je veux demander, c'est que quand a le flux d'entrée du socket pourquoi ne pouvons-nous pas simplement en lire le texte? Qu'est-ce qu'un sockets inputstream et outputstream?

J'ai trouvé quelque chose ici sur SO voici le lien " Réseau Java: Expliquez InputStream et OutputStream dans Socket ", voici une réponse de DNA dit 

En Java, pour envoyer des données via le socket, vous obtenez un OutputStream (1) et écrivez-le dans OutputStream (vous produisez des données). "

Cela me déroute, quand outputStream est utilisé pour envoyer des données via socket quel était le besoin de out.write (buf), pourquoi avons-nous besoin d'envoyer "google.com" à outputStream?

10
Junaid Shirwani

la première chose que vous devez comprendre est ce qui est STREAM 

Un flux peut être défini comme une séquence de données. InputStream est utilisé pour lire les données d'une source et OutputStream est utilisé pour écrire des données dans une destination.

**** Suivant est le type de flux **** 

 we have byte stream and character stream.

enter image description here

classes we have in Input Stream and output stream 

enter image description here

comme son nom l'indique dans termes simples, le flux d'entrée est utilisé pour entrer les données et le flux de sortie est utilisé pour générer les données

Les flux Java byte permettent d’entrer et de sortir des octets de 8 bits. Bien qu'il existe de nombreuses classes liées aux flux d'octets, mais les classes les plus fréquemment utilisées sont FileInputStream et FileOutputStream . Aussi. 

Les flux Java Byte sont utilisés pour effectuer des entrées et des sorties en octets 8 bits, tandis que les flux Java Character sont utilisés pour les entrées et les sorties au format Unicode 16 bits. FileReader et FileWriter .. Bien que FileReader utilise en interne FileInputStream et FileWriter utilise FileOutputStream, mais la différence majeure est que FileReader lit deux octets à la fois et que FileWriter écrit deux octets à la fois. un temps.

Pour référence

  1. Qu'est-ce que InputStream & Output Stream? Pourquoi et quand les utilisons-nous?

  2. Java DataOutputStream getOutputStream () getInputStream ()

Exemple pour getInputStream et getOutputStream 

  1. http://zerioh.tripod.com/ressources/sockets.html

Nouveau lienhttp://docs.Oracle.com/javase/tutorial/essential/io/buffers.html

29
Divya

InputStream in et OutputStream out contiennent des références à deux types de flux pour lesquels vous pouvez lire ou écrire des données. Ne vous attendez pas à ce qu'ils conservent les valeurs du flux lui-même. Ils ont plutôt la possibilité de travailler avec le flux. Lorsque vous créez ces objets, vous n’envoyez/recevez pas de données. Vous n’obtenez que l’objet que vous pouvez utiliser pour envoyer/recevoir des données.

out.write(buf) envoie le contenu de buf sur le socket afin que tous les lecteurs du socket (dans votre cas, in) puissent recevoir ces données. Les données envoyées à out seront vues de l’autre côté du socket par un InputStream.

0
David Koelle

Ici, OutputStream est utilisé pour envoyer des données de l'autre côté du socket lorsque vous écrivez out.write(buf), il enverra des données de tampon dans le socket.

InputStream est utilisé pour recevoir des données de socket.

0
Smit Shilu