Java i / o streams; jakie są różnice?

java.io posiada wiele różnych strumieni I / o , (FileInputStream, FileOutputStream, FileReader, FileWriter, BufferedStreams... itd.) i jestem zdezorientowany w określaniu różnic między nimi. Jakie są przykłady, w których jeden rodzaj strumienia jest preferowany nad innym i jakie są rzeczywiste różnice między nimi?

Author: Peter Mortensen, 2009-07-21

9 answers

To jest wielki temat! Polecam zacząć od czytania strumieni I/o :

Strumień We/Wy reprezentuje wejście źródło lub cel wyjściowy. A strumień może reprezentować wiele różnych rodzaje źródeł i miejsc przeznaczenia, w tym pliki dyskowe, urządzenia, inne programy i Tablice Pamięci.

Strumienie obsługują wiele różnych rodzajów danych, w tym prostych bajtów, prymitywne typy danych, zlokalizowane postaci i przedmiotów. Niektóre strumienie po prostu przekazać dane; inni manipulują i przekształcić dane w użyteczne sposoby.

 12
Author: Andrew Hare,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-17 19:18:27

Strumienie: jeden bajt na raz. Dobre dla danych binarnych.

Czytelnicy / pisarze: jedna postać na raz. Dobre dla danych tekstowych.

Wszystko "buforowane": wiele bajtów / znaków naraz. Dobrze prawie cały czas.

 34
Author: Michael Myers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-21 15:47:37

Ucząc się Javy stworzyłem ten mentalny schemat o java.io:

Strumienie

  • byte oriented stream (8 bit)
  • dobre dla danych binarnych, takich jak Java .class file
  • dobre dla danych "zorientowanych maszynowo"

Czytelnicy / Pisarze

  • char (utf-16) oriented stream (16 bit)
  • dobre dla tekstu takiego jak Źródło Javy
  • dobre dla danych "zorientowanych na człowieka"

Buforowane

  • zawsze przydatne, chyba że udowodnione inaczej
 23
Author: dfa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-29 15:12:23

Podziel każdą nazwę na słowa: każda stolica to inne słowo.

  • File input Stream jest pobieraniem Input z pliku za pomocą Stream .
  • File Output Stream jest zapisem Output do pliku za pomocą Stream

I tak dalej i tak dalej

Jak napisał mmyers:

Strumienie: jeden bajt na raz.

Czytelnicy / pisarze: jedna postać na raz.

Buforowane*: wiele bajtów / znaków naraz.

 8
Author: T0xicCode,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-21 15:52:46

I also found this java_tip_how_read_files_quickly

Bardzo przydatne! Pokazuje, które strumienie są najbardziej wydajne.

 5
Author: Shervin Asgari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-26 12:14:16

Specjalizacje, które wymieniasz, to określone typy używane do zapewnienia standardowego interfejsu do różnych źródeł danych. Na przykład strumień plików i strumień obiektów zaimplementują interfejs InputStream, ale będą działać odpowiednio na plikach i obiektach.

 3
Author: PaulJWilliams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-21 15:48:18

Jest to prawdopodobnie najbardziej dokładny przegląd różnych strumieni, czytelnika i pisarza w Java IO API:

Http://tutorials.jenkov.com/java-io/overview.html

Jest częścią większego samouczka Java IO obejmującego zarówno strumienie bajtowe, jak i charaterowe.

Obejmuje również strumienie, które są używane do odczytu i zapisu surowych danych liczbowych, takich jak zmiennoprzecinkowe int itp.

Obejmuje również strumienie używane do parsowania, takie jak PushbackInputStream i PushbackReader.

 3
Author: Jakob Jenkov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-10 18:31:20

Strumienie bajtowe są najczęściej i szeroko stosowanym typem strumienia w Javie 1.0 zarówno dla znaków, jak i dla bajtów. Po Javie 1.0 została ona przestarzała, a strumienie znaków odgrywają ważną rolę. ie., na przykład

BufferedReader pobierze znak ze źródła, a jego konstruktor wygląda następująco BufferedReader (reader inputReader)..

Tutaj Reader jest klasą abstrakcyjną, a jedną z jej konkretnych klas jest InputStreamReader, który będzie konwertował bajty na znaki i pobierał dane wejściowe z klawiatury(System.in) ...

BufferedReader: zawiera wewnętrzny bufor, który będzie odczytywał znaki ze strumienia. Wewnętrzny licznik śledzi następny znak, który ma być dostarczony do bufora przez read (). InputStreamReader będzie pobierał dane wejściowe jako bajty i konwertował je wewnętrznie na znaki.

 2
Author: i2ijeya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-10 10:25:01

Wejście i wyjście Javy jest definiowane w kategoriach abstrakcyjnego pojęcia zwanego "strumieniem", który jest sekwencją danych. Występują 2 rodzaje strumieni.

  • strumienie bajtów (8 bitów bajtów) A klasy abstrakcyjne to: InputStream i OutputStream
  • strumienie znaków (16-bitowy UNICODE) Æ klasy abstrakcyjne to: Reader i Writer

Java.io. * zajęcia wykorzystują wzór projektowy dekoratora. Wzór projektu dekoratora dołącza obowiązki wobec obiektów w czasie wykonywania. Dekoratorami są bardziej elastyczny niż dziedziczenie, ponieważ dziedziczenie przywiązuje odpowiedzialność do klas w czasie kompilacji. Na java.io. * klasy wykorzystują wzór dekoratora do konstruowania różne kombinacje zachowań w czasie wykonywania w oparciu o niektóre podstawowe klasy. Tutaj wpisz opis obrazkaTutaj wpisz opis obrazka

Z książki Java / J2EE Job Interview Companion by K. Arulkumaran & A. Sivayini

 0
Author: Toumi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-24 10:56:14