Java BufferedInputStream (met voorbeelden)

In deze zelfstudie leren we met behulp van voorbeelden over Java BufferedInputStream en zijn methoden.

De BufferedInputStreamklasse van het java.iopakket wordt gebruikt met andere invoerstromen om de gegevens (in bytes) efficiënter te lezen.

Het breidt de InputStreamabstracte klasse uit.

Werken met BufferedInputStream

Het BufferedInputStreamonderhoudt een interne buffer van 8192 bytes .

Tijdens het inlezen BufferedInputStreamwordt een brok bytes van de schijf gelezen en opgeslagen in de interne buffer. En uit de interne buffer worden bytes afzonderlijk gelezen.

Daarom wordt het aantal communicatie met de schijf verminderd. Dit is de reden waarom het lezen van bytes sneller gaat met de BufferedInputStream.

Maak een BufferedInputStream

Om een ​​te maken BufferedInputStream, moeten we eerst het java.io.BufferedInputStreampakket importeren . Zodra we het pakket hebben geïmporteerd, is hier hoe we de invoerstroom kunnen maken.

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

In het bovenstaande voorbeeld hebben we een BufferdInputStreambenoemde buffer gemaakt met het FileInputStreamgenoemde bestand.

Hier heeft de interne buffer de standaardgrootte van 8192 bytes. We kunnen echter ook de grootte van de interne buffer specificeren.

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

De buffer helpt om bytes uit de bestanden sneller te lezen.

Methoden van BufferedInputStream

De BufferedInputStreamklasse biedt implementaties voor verschillende methoden die in de InputStreamklasse aanwezig zijn.

read () Methode

  • read() - leest een enkele byte uit de invoerstroom
  • read(byte() arr) - leest bytes uit de stream en slaat op in de opgegeven array
  • read(byte() arr, int start, int length) - leest het aantal bytes dat gelijk is aan de lengte van de stream en slaat het op in de opgegeven array vanaf het begin van de positie

Stel dat we een bestand hebben met de naam input.txt met de volgende inhoud.

 This is a line of text inside the file. 

Laten we proberen het bestand te lezen met 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(); ) ) ) 

Uitvoer

 Dit is een regel tekst in het bestand. 

In het bovenstaande voorbeeld hebben we een gebufferde invoerstroom gemaakt met de naam buffer samen met FileInputStream. De invoerstroom is gekoppeld aan het bestand input.txt .

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

Hier hebben we de read()methode gebruikt om een ​​reeks bytes uit de interne buffer van de gebufferde lezer te lezen.

available () Methode

Om het aantal beschikbare bytes in de invoerstroom te krijgen, kunnen we de available()methode gebruiken. Bijvoorbeeld,

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

Uitvoer

 Beschikbare bytes aan het begin: 39 Beschikbare bytes aan het einde: 36 

In het bovenstaande voorbeeld

  1. We gebruiken de available()methode eerst om het aantal beschikbare bytes in de invoerstroom te controleren.
  2. Vervolgens hebben we de read()methode 3 keer gebruikt om 3 bytes uit de invoerstroom te lezen.
  3. Nu, na het lezen van de bytes, hebben we opnieuw de beschikbare bytes gecontroleerd. Dit keer zijn de beschikbare bytes met 3 afgenomen.

skip () methode

Om het opgegeven aantal bytes te verwijderen en over te slaan, kunnen we de skip()methode gebruiken. Bijvoorbeeld,

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

Uitvoer

 Invoerstroom na het overslaan van 5 bytes: is een regel tekst in het bestand. 

In het bovenstaande voorbeeld hebben we de skip()methode gebruikt om 5 bytes uit de bestandsinvoerstroom over te slaan. Vandaar dat de bytes 'T', 'h', 'i', 's'en ' 'worden overgeslagen uit de invoerstroom.

close () Methode

Om de gebufferde invoerstroom te sluiten, kunnen we de close()methode gebruiken. Als de close()methode eenmaal is aangeroepen, kunnen we de invoerstroom niet gebruiken om de gegevens te lezen.

Andere methoden van BufferedInputStream

Methoden Beschrijvingen
mark() markeer de positie in de invoerstroom tot waar de gegevens zijn gelezen
reset() geeft het besturingselement terug naar het punt in de invoerstroom waar de markering was ingesteld

Ga voor meer informatie naar Java BufferdInputStream (officiële Java-documentatie).

Interessante artikelen...