Pytanie Zrozumienie getInputStream i getOutputStream


Oto kod

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

Oznaczyłem oświadczenia, które mam problem zrozumienia.Nie rozumiem, co obiekt OutputStream out będzie trzymać, gdy zostanie przypisany s.getOutputStream() i jaka jest potrzeba przejścia buf do out przez out.write(buf) .

Nauczyłem się strumieni wejściowych i wyjściowych przy użyciu plików, ale nie rozumiem getinputstream i outputstreamsPrzeszukałem go, przeczytałem tutaj na SO, a także z wielu różnych książek i dokumentów z wyroczni. omów to szczegółowo.

Wiem, jak czytać z plików i jak do nich pisać. Ale tutaj nie rozumiem, co jest potrzebne do przejścia buf tablica, która posiada tylko ciąg. co mam na myśli, to, że kiedy ma strumień wejściowy gniazda, dlaczego nie możemy bezpośrednio z niego czytać? Czym dokładnie są gniazda inputstream i outputstream?

Znalazłem coś tutaj na SO tutaj jest link "Java Networking: Wyjaśnij InputStream i OutputStream w Socket", tutaj odpowiada odpowiedź DNA

W Javie, aby przesłać dane przez gniazdo, otrzymasz od niego OutputStream (1) i zapiszesz w OutputStream (wypiszesz niektóre dane). "

To jest mylące, kiedy outputStream jest używany do wysyłania danych przez gniazdo, co było potrzebne out.write (buf), dlaczego musimy wysłać "google.com" do outputStream?


11
2018-03-21 16:17


pochodzenie




Odpowiedzi:


pierwszą rzeczą, którą musisz zrozumieć, jest to, co jest STRUMIEŃ 

Strumień można zdefiniować jako sekwencję danych. InputStream służy do odczytu danych ze źródła, a OutputStream służy do zapisywania danych do miejsca docelowego.

**** Następny jest rodzaj strumieni ****

 we have byte stream and character stream.

enter image description here

classes we have in Input Stream and output stream 

enter image description here

jak sugeruje nazwa w proste terminy  strumień wejściowy służy do wprowadzania danych, a strumień wyjściowy służy do wyprowadzania danych

Jawa Strumienie bajtów są używane do wykonania wejścia i wyjścia 8-bitowych bajtów. Chociaż istnieje wiele klas związanych ze strumieniami bajtów, ale najczęściej używanymi klasami są: FileInputStream i FileOutputStream. również

Jawa Strumienie bajtów są używane do wykonania wejściowych i wyjściowych 8-bitowych bajtów, gdzie jako Java Strumienie postaci są używane do wykonania wejścia i wyjścia dla 16-bitowego kodu Unicode. Chociaż istnieje wiele klas związanych ze strumieniami znaków, ale najczęściej używanymi klasami są FileReader i FileWriter .. Chociaż wewnętrznie FileReader używa FileInputStream, a FileWriter używa FileOutputStream, ale tutaj główną różnicą jest to, że FileReader czyta dwa bajty na raz, a FileWriter zapisuje dwa bajty w czas.

Na przykład

  1. Co to jest InputStream i strumień wyjściowy? Dlaczego i kiedy ich używamy?

  2. java DataOutputStream getOutputStream () getInputStream ()

Przykład dla getInputStream i getOutputStream 

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

Nowy link http://docs.oracle.com/javase/tutorial/essential/io/buffers.html


29
2018-03-21 16:37



Wiem, jakie strumienie są i jakie są strumienie wejściowe i wyjściowe.Jak nie rozumiem jest to, że gdy buf jest wysyłany do strumienia wyjściowego, jak odczytuje go inputstream. Strumień wejściowy pobiera tylko zawartość buf, która jest tylko ciągiem w bajcie form.how Czy to wtedy czyta? - Junaid Shirwani
jaki jest cel zapisu out.write (buf) do wyjścia strumienia? To jest to, co I asked.out przytrzymaj strumień wyjściowy gniazda, które ma inetadress google.com. co jest celem zapisu do strumienia wyjściowego takie gniazdo? to, o co prosiłem i mam wszystko oprócz tego. Potrzebuję wyjaśnienia, proszę - Junaid Shirwani
nie, nie, nie, nie rozumiesz, próbuję nauczyć się gniazd w Javie. Nie jestem w stanie zrozumieć tego fragmentu kodu, mimo że bardzo się staram. Albo jestem głupi, albo nie rozumiesz, o co mi chodzi. Próbuję zapytać? - Junaid Shirwani
kiedy piszę buf do wyjścia od gniazda, które czyta z niego? - Junaid Shirwani
co rozumiem teraz po ponownym przeczytaniu tego, co powiedziałeś, że gniazdo jest podłączone do serwera, wysyła buf na inne końce poprzez swój strumień wyjściowy, serwer niż czyta go i zwraca to, o co prosi, to jest google.com Zwrócony ciąg / obiekt jest przechowywany w strumieniu wejściowym gniazda? czy mam rację? - Junaid Shirwani


Tutaj OutputStream jest używany do wysyłania danych na drugą stronę w gnieździe za każdym razem, gdy piszesz out.write(buf)wyśle ​​dane bufora do gniazda.

InputStream służy do odbierania danych z gniazda.


0
2018-03-21 16:32



jaka jest potrzeba wysłania "google.com" na drugą stronę gniazda? Czy nie możemy uzyskać inputputStream i czytać z niego? dlaczego musimy najpierw pisać buf do strumienia wyjściowego, a następnie czytać tylko z niego? proszę napisać szczegół w swojej odpowiedzi, ponieważ wszystko jest jasne. to jest to, co dostaję w google i niestety - Junaid Shirwani
przesyłasz nazwę domeny na drugą stronę i przyjmujesz odpowiednią odpowiedź z drugiej strony. osborne.com ciąg wysyłany na drugą stronę - Smit Shilu
więc masz na myśli powiedzieć, że serwer osborne.com czyta z wyjścia, które przechowuje dane buf? - Junaid Shirwani
Mówię to Socket s = new Socket("whois.internic.net",43); to połączy się z whois.internic.net, a domena o tym, co chciałeś wiedzieć, to "osborne.com", więc gdy wyślesz ten ciąg do serwera w odpowiedzi, wyśle ​​ci informacje o "osborne.com". - Smit Shilu


InputStream in i OutputStream out będzie zawierać odniesienia do dwóch rodzajów strumieni, z których można odczytać dane lub zapisać dane. Nie oczekuj, że utrzymają wartości z samego strumienia - zamiast tego mają możliwość pracy ze strumieniem. Kiedy tworzysz te obiekty, nie wysyłasz / odbierasz żadnych danych - właśnie dostajesz obiekt, którego możesz używać do wysyłania / odbierania danych.

out.write(buf) wysyła treść buf nad gniazdem, aby każdy czytnik gniazda (w twoim przypadku in) może odbierać te dane. Bez względu na to, jakie dane są wysyłane out będą widoczne po drugiej stronie gniazda przez InputStream.


0
2018-03-21 16:36



zawartość buf to google.com w formacie bajtowym. więc moje pytanie brzmi "co" w "czytaniu"? \ - Junaid Shirwani