Java BufferedInputStream (z przykładami)

W tym samouczku dowiemy się o języku Java BufferedInputStream i jego metodach za pomocą przykładów.

BufferedInputStreamKlasa java.iopakietu jest używany z innymi strumieniami wejściowymi do bardziej efektywnego odczytu danych (w bajtach).

Rozszerza InputStreamklasę abstrakcyjną.

Działanie BufferedInputStream

BufferedInputStreamUtrzymuje 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.BufferedInputStreampakiet. 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 BufferdInputStreamnazwany bufor z FileInputStreamnazwanym 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

BufferedInputStreamKlasa zawiera implementacje dla różnych sposobów przedstawienia w InputStreamklasie.

read () Metoda

  • read() - czyta pojedynczy bajt ze strumienia wejściowego
  • read(byte() arr) - odczytuje bajty ze strumienia i przechowuje w określonej tablicy
  • read(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

  1. Najpierw używamy tej available()metody, aby sprawdzić liczbę dostępnych bajtów w strumieniu wejściowym.
  2. Następnie użyliśmy tej read()metody 3 razy, aby odczytać 3 bajty ze strumienia wejściowego.
  3. 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).

Interesujące artykuły...