W tym samouczku dowiemy się o języku Java BufferedInputStream i jego metodach za pomocą przykładów.
BufferedInputStream
Klasa java.io
pakietu jest używany z innymi strumieniami wejściowymi do bardziej efektywnego odczytu danych (w bajtach).
Rozszerza InputStream
klasę abstrakcyjną.
Działanie BufferedInputStream
BufferedInputStream
Utrzymuje wewnętrzny bufor 8192 bajtów .
Podczas operacji odczytu w BufferedInputStream
, porcja bajtów jest odczytywana z dysku i zapisywana w buforze wewnętrznym. A bajty z bufora wewnętrznego odczytywane są indywidualnie.
W związku z tym zmniejsza się liczba komunikacji z dyskiem. Dlatego czytanie bajtów jest szybsze przy użyciu BufferedInputStream
.
Utwórz BufferedInputStream
Aby utworzyć plik BufferedInputStream
, musimy najpierw zaimportować java.io.BufferedInputStream
pakiet. Po zaimportowaniu pakietu tutaj, możemy utworzyć strumień wejściowy.
// Creates a FileInputStream FileInputStream file = new FileInputStream(String path); // Creates a BufferedInputStream BufferedInputStream buffer = new BufferInputStream(file);
W powyższym przykładzie utworzyliśmy BufferdInputStream
nazwany bufor z FileInputStream
nazwanym plikiem.
Tutaj bufor wewnętrzny ma domyślny rozmiar 8192 bajtów. Możemy jednak określić również rozmiar bufora wewnętrznego.
// Creates a BufferedInputStream with specified size internal buffer BufferedInputStream buffer = new BufferInputStream(file, int size);
Bufor pomoże szybciej odczytać bajty z plików.
Metody BufferedInputStream
BufferedInputStream
Klasa zawiera implementacje dla różnych sposobów przedstawienia w InputStream
klasie.
read () Metoda
read()
- czyta pojedynczy bajt ze strumienia wejściowegoread(byte() arr)
- odczytuje bajty ze strumienia i przechowuje w określonej tablicyread(byte() arr, int start, int length)
- odczytuje liczbę bajtów równą długości ze strumienia i zapisuje w określonej tablicy zaczynając od pozycji początkowej
Załóżmy, że mamy plik o nazwie input.txt z następującą zawartością.
This is a line of text inside the file.
Spróbujmy odczytać plik za pomocą 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(); ) ) )
Wynik
To jest wiersz tekstu w pliku.
W powyższym przykładzie utworzyliśmy buforowany strumień wejściowy o nazwie buffer wraz z FileInputStream
. Strumień wejściowy jest powiązany z plikiem input.txt .
FileInputStream file = new FileInputStream("input.txt"); BufferedInputStream buffer = new BufferedInputStream(file);
Tutaj użyliśmy tej read()
metody do odczytania tablicy bajtów z wewnętrznego bufora buforowanego czytnika.
dostępne () Metoda
Aby uzyskać liczbę dostępnych bajtów w strumieniu wejściowym, możemy użyć available()
metody. Na przykład,
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(); ) ) )
Wynik
Liczba dostępnych bajtów na początku: 39 Liczba dostępnych bajtów na końcu: 36
W powyższym przykładzie
- Najpierw używamy tej
available()
metody, aby sprawdzić liczbę dostępnych bajtów w strumieniu wejściowym. - Następnie użyliśmy tej
read()
metody 3 razy, aby odczytać 3 bajty ze strumienia wejściowego. - Teraz po odczytaniu bajtów ponownie sprawdziliśmy dostępne bajty. Tym razem dostępne bajty zmniejszyły się o 3.
skip () Metoda
Aby odrzucić i pominąć określoną liczbę bajtów, możemy użyć skip()
metody. Na przykład,
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(); ) ) )
Wynik
Strumień wejściowy po pominięciu 5 bajtów: to linia tekstu wewnątrz pliku.
W powyższym przykładzie użyliśmy skip()
metody do pominięcia 5 bajtów ze strumienia wejściowego pliku. W związku z tym, gdy bajty 'T'
, 'h'
, 'i'
, 's'
i ' '
są pomijane ze strumienia wejściowego.
close () Metoda
Aby zamknąć buforowany strumień wejściowy, możemy użyć close()
metody. Po close()
wywołaniu metody nie możemy użyć strumienia wejściowego do odczytu danych.
Inne metody BufferedInputStream
Metody | Opisy |
---|---|
mark() | zaznacz pozycję w strumieniu wejściowym, do której zostały odczytane dane |
reset() | zwraca formant do punktu w strumieniu wejściowym, w którym ustawiono znacznik |
Aby dowiedzieć się więcej, odwiedź stronę Java BufferdInputStream (oficjalna dokumentacja Java).