Java BufferedInputStream (cu exemple)

În acest tutorial, vom afla despre Java BufferedInputStream și metodele sale cu ajutorul unor exemple.

BufferedInputStreamClasa a java.iopachetului este utilizat cu alte fluxuri de intrare pentru a citi datele (în bytes) mai eficient.

Extinde InputStreamclasa abstractă.

Funcționarea BufferedInputStream

BufferedInputStreamMenține un intern tampon de 8192 octeți .

În timpul operației de citire BufferedInputStream, o bucată de octeți este citită de pe disc și stocată în buffer-ul intern. Și din bufferul intern octeții sunt citiți individual.

Prin urmare, numărul de comunicații pe disc este redus. Acesta este motivul pentru care citirea octeților este mai rapidă folosind BufferedInputStream.

Creați un BufferedInputStream

Pentru a crea un BufferedInputStream, trebuie să importăm mai java.io.BufferedInputStreamîntâi pachetul. Odată ce am importat pachetul, iată cum putem crea fluxul de intrare.

 // Creates a FileInputStream FileInputStream file = new FileInputStream(String path); // Creates a BufferedInputStream BufferedInputStream buffer = new BufferInputStream(file); 

În exemplul de mai sus, am creat un BufferdInputStreamtampon numit cu FileInputStreamfișierul numit.

Aici, tamponul intern are dimensiunea implicită de 8192 octeți. Cu toate acestea, putem specifica și dimensiunea bufferului intern.

 // Creates a BufferedInputStream with specified size internal buffer BufferedInputStream buffer = new BufferInputStream(file, int size); 

Tamponul va ajuta la citirea mai rapidă a octeților din fișiere.

Metode BufferedInputStream

BufferedInputStreamClasa oferă implementări pentru diferite metode prezintă în InputStreamclasă.

read () Metodă

  • read() - citește un singur octet din fluxul de intrare
  • read(byte() arr) - citește octeți din flux și stochează în matricea specificată
  • read(byte() arr, int start, int length) - citește numărul de octeți egal cu lungimea fluxului și stochează în matricea specificată începând de la începutul poziției

Să presupunem că avem un fișier numit input.txt cu următorul conținut.

 This is a line of text inside the file. 

Să încercăm să citim fișierul folosind BufferedInputStream.

 import java.io.BufferedInputStream; import java.io.FileInputStream; class Main ( public static void main(String() args) ( try ( // Creates a FileInputStream FileInputStream file = new FileInputStream("input.txt"); // Creates a BufferedInputStream BufferedInputStream input = new BufferedInputStream(file); // Reads first byte from file int i = input .read(); while (i != -1) ( System.out.print((char) i); // Reads next byte from the file i = input.read(); ) input.close(); ) catch (Exception e) ( e.getStackTrace(); ) ) ) 

Ieșire

 Aceasta este o linie de text din interiorul fișierului. 

În exemplul de mai sus, am creat un flux de intrare buffer numit buffer împreună cu FileInputStream. Fluxul de intrare este legat de fișierul input.txt .

 FileInputStream file = new FileInputStream("input.txt"); BufferedInputStream buffer = new BufferedInputStream(file); 

Aici, am folosit read()metoda pentru a citi o serie de octeți din buffer-ul intern al cititorului buffered.

disponibil () Metodă

Pentru a obține numărul de octeți disponibili în fluxul de intrare, putem folosi available()metoda. De exemplu,

 import java.io.FileInputStream; import java.io.BufferedInputStream; public class Main ( public static void main(String args()) ( try ( // Suppose, the input.txt file contains the following text // This is a line of text inside the file. FileInputStream file = new FileInputStream("input.txt"); // Creates a BufferedInputStream BufferedInputStream buffer = new BufferedInputStream(file); // Returns the available number of bytes System.out.println("Available bytes at the beginning: " + buffer.available()); // Reads bytes from the file buffer.read(); buffer.read(); buffer.read(); // Returns the available number of bytes System.out.println("Available bytes at the end: " + buffer.available()); buffer.close(); ) catch (Exception e) ( e.getStackTrace(); ) ) ) 

Ieșire

 Octiți disponibili la început: 39 Octiți disponibili la sfârșit: 36 

În exemplul de mai sus,

  1. Mai întâi folosim available()metoda pentru a verifica numărul de octeți disponibili în fluxul de intrare.
  2. Apoi, am folosit read()metoda de 3 ori pentru a citi 3 octeți din fluxul de intrare.
  3. Acum, după ce am citit octeții, am verificat din nou octeții disponibili. De această dată, octeții disponibili au scăzut cu 3.

skip () Metodă

Pentru a elimina și a omite numărul specificat de octeți, putem folosi skip()metoda. De exemplu,

 import java.io.FileInputStream; import java.io.BufferedInputStream; public class Main ( public static void main(String args()) ( try ( // Suppose, the input.txt file contains the following text // This is a line of text inside the file. FileInputStream file = new FileInputStream("input.txt"); // Creates a BufferedInputStream BufferedInputStream buffer = new BufferedInputStream(file); // Skips the 5 bytes buffer.skip(5); System.out.println("Input stream after skipping 5 bytes:"); // Reads the first byte from input stream int i = buffer.read(); while (i != -1) ( System.out.print((char) i); // Reads next byte from the input stream i = buffer.read(); ) // Closes the input stream buffer.close(); ) catch (Exception e) ( e.getStackTrace(); ) ) ) 

Ieșire

 Fluxul de intrare după omiterea a 5 octeți: este o linie de text din fișier. 

În exemplul de mai sus, am folosit skip()metoda pentru a sări peste 5 octeți din fluxul de intrare a fișierului. Prin urmare, octeții 'T', 'h', 'i', 's'și ' 'sunt omise din fluxul de intrare.

close () Metoda

Pentru a închide fluxul de intrare tamponat, putem folosi close()metoda. Odată close()apelată metoda, nu putem folosi fluxul de intrare pentru a citi datele.

Alte metode ale BufferedInputStream

Metode Descrieri
mark() marcați poziția în fluxul de intrare până la care au fost citite datele
reset() returnează controlul la punctul din fluxul de intrare unde a fost setată marca

Pentru a afla mai multe, vizitați Java BufferdInputStream (documentație oficială Java).

Articole interesante...