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()
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(); } } }
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.