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ě
horní index v ilustrátoru
Příklad 2: Použití metody flush().
Javaimport 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
css obtékání textu...
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.