Klasa Java BufferedOutputStream
W Javie klasa BufferedOutputStream służy do wydajniejszego zapisywania danych w strumieniu wyjściowym. Dodaje bufor do innego strumienia wyjściowego, zmniejszając liczbę operacji we/wy poprzez tymczasowe przechowywanie danych w pamięci przed zapisaniem ich w miejscu docelowym (jak plik).
Należy do pakietu java.io i stanowi rozszerzenie klasy FilterOutputStream.
Deklaracja klasy
klasa publiczna BufferedOutputStream rozszerza FilterOutputStream
- Poprawia wydajność operacji we/wy poprzez użycie bufora w celu ograniczenia bezpośredniego dostępu do dysku.
- Dane są zapisywane w buforze i dopiero gdy bufor jest pełny (lub opróżniony), są wysyłane do bazowego strumienia wyjściowego.
- Zwykle używany z FileOutputStream.
- Pomaga w zapisywaniu danych bajtowych, takich jak obrazy, pliki tekstowe i dane binarne.
Konstruktorzy
- Buforowany strumień wyjściowy (wyjście strumienia wyjściowego): Tworzy buforowany strumień wyjściowy o domyślnym rozmiarze bufora wynoszącym 8192 bajtów.
- BufferedOutputStream(OutputStream out int size): Tworzy buforowany strumień wyjściowy o określonym rozmiarze buforu.
Ważne metody
| Metoda | Opis |
|---|---|
void write(int b) | Zapisuje pojedynczy bajt w strumieniu wyjściowym. |
void write(byte[] b int off int len) | Zapisuje część tablicy bajtów w strumieniu wyjściowym. |
void flush() | Opróżnia bufor i wymusza zapisanie wszystkich buforowanych bajtów wyjściowych. |
void close() | Zamyka strumień, najpierw go płucząc. |
Java import java.io.* ; public class BufferedOutputStreamExample { public static void main ( String [] args ) { String data = 'BufferedOutputStream in Java Example' ; try { FileOutputStream fileOut = new FileOutputStream ( 'output.txt' ); BufferedOutputStream bufferOut = new BufferedOutputStream ( fileOut ); byte [] bytes = data . getBytes (); bufferOut . write ( bytes ); bufferOut . close (); System . out . println ( 'Data written successfully.' ); } catch ( IOException e ) { e . printStackTrace (); } } }
import java.io.* ; public class BufferedOutputStreamExample { public static void main ( String [] args ) { String data = 'BufferedOutputStream in Java Example' ; try { FileOutputStream fileOut = new FileOutputStream ( 'output.txt' ); BufferedOutputStream bufferOut = new BufferedOutputStream ( fileOut ); byte [] bytes = data . getBytes (); bufferOut . write ( bytes ); bufferOut . close (); System . out . println ( 'Data written successfully.' ); } catch ( IOException e ) { e . printStackTrace (); } } }
Dane wyjściowe (zawartość pliku wyjściowego.txt):
BufferedOutputStream w przykładzie Java
Przykład 2: Użycie metody Flush().
Java import java.io.* ; public class FlushExample { public static void main ( String [] args ) { try { FileOutputStream fileOut = new FileOutputStream ( 'flush.txt' ); BufferedOutputStream bufferOut = new BufferedOutputStream ( fileOut ); bufferOut . write ( 'Hello' . getBytes ()); bufferOut . flush (); // ensures data is written immediately bufferOut . close (); System . out . println ( 'Flush example completed.' ); } catch ( IOException e ) { e . printStackTrace (); } } }
Dane wyjściowe (zawartość pliku Flush.txt):
Cześć
Java import java.io.* ; public class LargeDataExample { public static void main ( String [] args ) { try { FileOutputStream fileOut = new FileOutputStream ( 'large.txt' ); BufferedOutputStream bufferOut = new BufferedOutputStream ( fileOut 8192 ); // custom buffer size for ( int i = 0 ; i < 1000 ; i ++ ) { bufferOut . write (( 'Line ' + i + 'n' ). getBytes ()); } bufferOut . close (); System . out . println ( 'Large data written successfully.' ); } catch ( IOException e ) { e . printStackTrace (); } } }
import java.io.* ; public class LargeDataExample { public static void main ( String [] args ) { try { FileOutputStream fileOut = new FileOutputStream ( 'large.txt' ); BufferedOutputStream bufferOut = new BufferedOutputStream ( fileOut 8192 ); // custom buffer size for ( int i = 0 ; i < 1000 ; i ++ ) { bufferOut . write (( 'Line ' + i + 'n' ). getBytes ()); } bufferOut . close (); System . out . println ( 'Large data written successfully.' ); } catch ( IOException e ) { e . printStackTrace (); } } }
Dane wyjściowe (zawartość pierwszych kilku wierszy dużego.txt):
Linia 0
Linia 1
Linia 2
...
Zalety
- Szybsza wydajność zapisu w porównaniu do strumieni niebuforowanych.
- Zmniejsza liczbę fizycznych operacji zapisu.
- Umożliwia wydajne zapisywanie dużych danych.