In deze zelfstudie leren we met behulp van voorbeelden over Java BufferedInputStream en zijn methoden.
De BufferedInputStream
klasse van het java.io
pakket wordt gebruikt met andere invoerstromen om de gegevens (in bytes) efficiënter te lezen.
Het breidt de InputStream
abstracte klasse uit.
Werken met BufferedInputStream
Het BufferedInputStream
onderhoudt een interne buffer van 8192 bytes .
Tijdens het inlezen BufferedInputStream
wordt 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.BufferedInputStream
pakket 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 BufferdInputStream
benoemde buffer gemaakt met het FileInputStream
genoemde 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 BufferedInputStream
klasse biedt implementaties voor verschillende methoden die in de InputStream
klasse aanwezig zijn.
read () Methode
read()
- leest een enkele byte uit de invoerstroomread(byte() arr)
- leest bytes uit de stream en slaat op in de opgegeven arrayread(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
- We gebruiken de
available()
methode eerst om het aantal beschikbare bytes in de invoerstroom te controleren. - Vervolgens hebben we de
read()
methode 3 keer gebruikt om 3 bytes uit de invoerstroom te lezen. - 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).