Classe Java BufferedOutputStream
In Java la classe BufferedOutputStream viene utilizzata per scrivere i dati in un flusso di output in modo più efficiente. Aggiunge un buffer a un altro flusso di output riducendo il numero di operazioni I/O archiviando temporaneamente i dati in memoria prima di scriverli nella destinazione (come un file).
Appartiene al pacchetto java.io ed estende la classe FilterOutputStream.
Dichiarazione di classe
la classe pubblica BufferedOutputStream estende FilterOutputStream
- Migliora le prestazioni di I/O utilizzando un buffer per ridurre l'accesso diretto al disco.
- I dati vengono scritti nel buffer e solo quando il buffer è pieno (o svuotato) vengono inviati al flusso di output sottostante.
- Tipicamente utilizzato con FileOutputStream.
- Aiuta nella scrittura di dati byte come file di testo di immagini e dati binari.
Costruttori
- BufferedOutputStream(OutputStream fuori): Crea un flusso di output memorizzato nel buffer con una dimensione del buffer predefinita di 8192 byte.
- BufferedOutputStream(OutputStream out int size): Crea un flusso di output memorizzato nel buffer con la dimensione del buffer specificata.
Metodi importanti
| Metodo | Descrizione |
|---|---|
void write(int b) | Scrive un singolo byte nel flusso di output. |
void write(byte[] b int off int len) | Scrive una parte della matrice di byte nel flusso di output. |
void flush() | Svuota il buffer e forza la scrittura di tutti i byte di output memorizzati nel buffer. |
void close() | Chiude prima il flusso scaricandolo. |
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 (); } } }
Output (contenuto di output.txt):
BufferedOutputStream nell'esempio Java
Esempio 2: utilizzo del metodo 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 (); } } }
Output (contenuto di flush.txt):
Ciao
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 (); } } }
Output (contenuto delle prime righe di large.txt):
Linea 0
Linea 1
Linea 2
...
Vantaggi
- Prestazioni di scrittura più veloci rispetto ai flussi senza buffer.
- Riduce il numero di operazioni di scrittura fisica.
- Consente di scrivere dati di grandi dimensioni in modo efficiente.