Tampone:
È una regione di una memoria fisica utilizzata per memorizzare temporaneamente i dati mentre viene spostato da un luogo all'altro. Quella memoria di memoria fisica sarebbe RAM (memoria ad accesso casuale) nella maggior parte dei casi.
Ma dal contesto di questa domanda, Buffer viene utilizzato durante la lettura/scrittura di dati. Non è necessario utilizzarlo mentre si spostano i dati da un luogo a un altro.
Esempio per il buffer: Se il sistema ha 4 GB di RAM, 4 KB di memoria (RAM) può essere assegnato per Buffer dal sistema. KB - Kilobyte (s), GB - Gigabyte (s)
I/O Stream (o) Stream:
I/O stream rappresenta una sorgente di ingresso o una destinazione di uscita. Uno stream può rappresentare molti diversi tipi di origini e destinazioni, compresi file su disco, dispositivi, altri programmi e array di memoria.
I/O significa Input/Output.
Quindi, flusso di input può essere una sorgente di ingresso come file su disco, connessione di rete, ecc
E, uscita stream può essere una destinazione di uscita come file su disco, connessione di rete, ecc
Secondo lo JAVA official documentation, gli stream sono di 3 tipi.
- Byte Streams (lettura o scrittura Byte)
- Character Streams (leggere o scrivere caratteri)
- Buffered Streams (leggere, o scrivere, Buffer per l'efficienza)
Byte Streams:
Eseguono input e output di byte da 8 bit. Tutte le classi di stream di byte discendono da InputStream e OutputStream.
Byte Le classi di flusso di input ottengono input come byte grezzi. Le classi di flusso di uscita byte forniscono l'output come byte grezzi.
InputStream
- diretti sottoclassi noti
AudioInputStream, ByteArrayInputStream, FileInputStream, FilterInputStream, InputStream, ObjectInputStream, PipedInputStream, SequenceInputStream, StringBufferInputStream.
OutputStream
- diretti Sottoclassi noti
ByteArrayOutputStream, FileOutputStream, FilterOutputStream, ObjectOutputStream, OutputStream, PipedOutputStream
Carattere Streams: Sono uno strato sulla parte superiore del Byte Streams. Trasformano i byte (dati binari) in caratteri e caratteri in byte, usando una codifica di caratteri.
Tutte le classi stream carattere discendono da Reader e Writer.
Reader
- diretta Conosciuto sottoclassi
BufferedReader, CharArrayReader, FilterReader, InputStreamReader, PipedReader, StringReader
Writer
- diretto conosciuto sottoclassi
BufferedWriter, CharArrayWriter, FilterWriter, OutputStreamWriter, PipedWriter, PrintWriter, StringWriter
Byte Streams & carattere Streams uso senza buffer di I/O.
Ciò significa che ogni richiesta di lettura o scrittura viene gestita dal direttamente dal sistema operativo sottostante. Ciò può rendere un programma molto meno efficiente , dal momento che ciascuna di tali richieste spesso attiva l'accesso al disco, l'attività di rete o altre operazioni relativamente costose. Per ridurre questo tipo di sovraccarico, la piattaforma Java implementa i flussi di I/O bufferizzati .
Buffered Streams:
ingresso Buffered flussi dati letti da un'area di memoria noto come tampone; l'API di input nativa viene chiamata solo quando il buffer è vuoto.
Analogamente, i flussi di output bufferizzati scrivono dati su un buffer e l'API di output nativo viene chiamata solo quando il buffer è pieno.
Un programma può convertire un buffer flusso in un tamponata flusso utilizzando il linguaggio di incarto, in cui l'oggetto flusso buffer viene passato al costruttore per una classe di flusso tamponata.
Esempio:
inputStream = new BufferedReader(new FileReader("xanadu.txt"));
outputStream = new BufferedWriter(new FileWriter("characteroutput.txt"));
Ci sono 4 classi stream tamponate che vengono utilizzati per avvolgere i flussi senza buffer:
per creare tamponataByte Streams uso, BufferedInputStream
e BufferedOutputStream
classi.
Per creare tamponataPersonaggio Corsi d'acqua uso, BufferedReader
e BufferedWriter
classi.
Ben spiegato! – NINCOMPOOP
Grazie per la tua risposta, ma ho una confusione. Come hai detto, abbiamo letto poche migliaia di byte contemporaneamente e li abbiamo messi nel buffer, quindi questo significa che il buffer è solo un posto nella memoria in cui stiamo memorizzando le cose? – user122345656
@Jesper. Hai detto "Un modo per accelerare è utilizzare un buffer: invece di leggere un byte alla volta, leggi qualche migliaio di byte in una volta e li metti in un buffer, in memoria. Quindi puoi guardare i byte nel buffer uno per uno. " Sì, è vero, ma penso che anche con buffer, un singolo byte viene letto alla volta. L'unica differenza penso sia messa nel buffer e il programma quindi la legge dal buffer invece del disco –