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?
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.
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.
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
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.
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.
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.
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.
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.
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.
Z książki Java / J2EE Job Interview Companion by K. Arulkumaran & A. Sivayini
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