Strumień to ciągły przepływ danych. W Javie strumienie we/wy służą do odczytu ze źródeł wejściowych lub zapisu do miejsc docelowych, takich jak pliki. Umożliwiają sekwencyjny dostęp do danych. Pakiet java.io zawiera klasy do obsługi zarówno strumieni bajtów, jak i strumieni znaków, a także do konwersji między nimi.
- Strumień wejściowy: odczytuje dane ze źródła.
- Strumień wyjściowy: zapisuje dane do miejsca docelowego.
Kiedy używać strumienia znaków zamiast strumienia bajtów:
W Javie znaki są przechowywane przy użyciu konwencji Unicode. Strumień znaków przydaje się, gdy chcemy przetwarzać pliki tekstowe. Te pliki tekstowe można przetwarzać znak po znaku. Rozmiar znaku wynosi zazwyczaj 16 bitów.
Kiedy używać strumienia bajtów zamiast strumienia znaków:
Zorientowany na bajt czyta bajt po bajcie. Strumień bajtów nadaje się do przetwarzania surowych danych, takich jak pliki binarne.
Kluczowe punkty podczas używania i postępowania z którymkolwiek z powyższych strumieni:
- Klasy strumieni znaków zwykle kończą się na Reader/Writer, podczas gdy klasy strumieni bajtów kończą się na InputStream/OutputStream.
- Przykładowe kody w tym artykule wykorzystują strumienie niebuforowane, które są mniej wydajne. Aby uzyskać lepszą wydajność, zwykle otaczamy je BufferedReader/BufferedWriter (strumienie znaków) lub BufferedInputStream/BufferedOutputStream (strumienie bajtów).
- Zawsze zamykaj strumienie po użyciu, aby zwolnić zasoby i zapobiec błędom.
- Powyższe kody mogą nie działać w kompilatorach online, ponieważ pliki mogą nie istnieć.
Strumień postaci
W Javie znaki są przechowywane przy użyciu konwencji Unicode. Strumień znaków automatycznie pozwala nam czytać/zapisywać dane znak po znaku. Na przykład FileReader i FileWriter to strumienie znaków używane do odczytu ze źródła i zapisu do miejsca docelowego.
Strumienie postaciPrzykład
Javaimport java.io.*; public class GFG { public static void main(String[] args) throws IOException { // Initially assigning null as we have not read anything FileReader sourceStream = null; try { // Reading from file sourceStream = new FileReader('/Users/mayanksolanki/Desktop/demo.rtf'); // Reading sourcefile and writing content to target file character by character. int temp; // If there is content inside file than read while ((temp = sourceStream.read()) != -1) System.out.println((char)temp); System.out.print('Program successfully executed'); } finally { if (sourceStream != null) sourceStream.close(); } } }
Wyjście:
Zapisuje treść do pliku docelowego znak po znaku
Program pomyślnie wykonany
Strumień bajtów
Strumień bajtów w Javie to strumień obsługujący wejście i wyjście surowych 8-bitowych danych binarnych. Używany jest głównie do odczytu i zapisu danych nietekstowych, takich jak obrazy audio wideo lub dowolne pliki binarne. Na przykład Strumień wejściowy pliku służy do odczytu ze źródła, a FileOutputStream do zapisu do miejsca docelowego.
Przykład:
Javaimport java.io.*; public class GFG { public static void main(String[] args) throws IOException { // Initially assigning null ot objects for reading and writing to file FileInputStream sourceStream = null; FileOutputStream targetStream = null; try { // Passing the files via local directory sourceStream = new FileInputStream('/Users/mayanksolanki/Desktop/demo.rtf'); targetStream = new FileOutputStream('/Users/mayanksolanki/Desktop/democopy.rtf'); // Reading source file and writing content to file byte by byte int temp; // If there is content inside file than read while ((temp = sourceStream.read()) != -1) targetStream.write((byte)temp); System.out.print('Program successfully executed'); } // finally block that executes for sure where we are closing file connections to avoid memory leakage finally { if (sourceStream != null) sourceStream.close(); if (targetStream != null) targetStream.close(); } } }
Wyjście:
Program pomyślnie wykonany
Różnice w strumieniu znaków i strumieniu bajtów
| Aspekt | Strumień postaci | Strumień bajtów |
|---|---|---|
| Obsługiwany typ danych | 16-bitowe znaki Unicode (tekst) | 8-bitowe surowe dane (binarne) |
| Zajęcia kończą się | Czytelnik / Pisarz | Strumień wejściowy / Strumień wyjściowy |
| Nadaje się do | Pliki tekstowe Dane Unicode | Obrazy audio-wideo, pliki binarne |
| Konwersja | Automatycznie konwertuje bajty na znaki | Żadna konwersja nie działa w przypadku surowych bajtów |
| Przykłady | FileReader FileWriter | Strumień pliku wejściowego Strumień pliku wyjściowego |
Powiązany artykuł
- Java IO — wejście/wyjście w Javie z przykładami