Třída Java BufferedOutputStream
V Javě se třída BufferedOutputStream používá k efektivnějšímu zápisu dat do výstupního proudu. Přidává vyrovnávací paměť do jiného výstupního toku a snižuje počet I/O operací dočasným uložením dat do paměti před jejich zápisem do cíle (jako soubor).
Patří do balíčku java.io a rozšiřuje třídu FilterOutputStream.
Třídní prohlášení
public class BufferedOutputStream rozšiřuje FilterOutputStream
- Zlepšuje výkon I/O pomocí vyrovnávací paměti ke snížení přímého přístupu k disku.
- Data se zapisují do vyrovnávací paměti a pouze když je vyrovnávací paměť plná (nebo vyprázdněná), jsou odeslána do základního výstupního proudu.
- Obvykle se používá s FileOutputStream.
- Pomáhá při zápisu bajtových dat, jako jsou textové soubory obrázků a binární data.
Konstruktéři
- BufferedOutputStream(OutputStream out): Vytvoří výstupní proud s vyrovnávací pamětí s výchozí velikostí vyrovnávací paměti 8192 bajtů.
- BufferedOutputStream(OutputStream out int velikost): Vytvoří výstupní proud s vyrovnávací pamětí se zadanou velikostí vyrovnávací paměti.
Důležité metody
| Metoda | Popis |
|---|---|
void write(int b) | Zapíše jeden bajt do výstupního proudu. |
void write(byte[] b int off int len) | Zapíše část bajtového pole do výstupního proudu. |
void flush() | Vyprázdní vyrovnávací paměť a vynutí zápis všech výstupních bajtů ve vyrovnávací paměti. |
void close() | Uzavře proud a nejprve jej propláchne. |
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 (); } } }
Výstup (obsah souboru output.txt):
Příklad BufferedOutputStream v Javě
Příklad 2: Použití 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 (); } } }
Výstup (obsah flush.txt):
Ahoj
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 (); } } }
Výstup (obsah velkého.txt prvních pár řádků):
Řádek 0
Řádek 1
Řádek 2
...
Výhody
- Rychlejší zápis ve srovnání s streamy bez vyrovnávací paměti.
- Snižuje počet fyzických operací zápisu.
- Umožňuje efektivně zapisovat velká data.