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?
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.
classes we have in Input Stream and output stream
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
Exemple pour getInputStream et getOutputStream
Nouveau lienhttp://docs.Oracle.com/javase/tutorial/essential/io/buffers.html
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
.
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.