Java BufferedInputStream (з прикладами)

У цьому посібнику ми дізнаємося про Java BufferedInputStream та її методи за допомогою прикладів.

BufferedInputStreamКлас java.ioпакета використовується з іншими вхідними потоками , щоб більш ефективно зчитувати дані (в байтах).

Це розширює InputStreamабстрактний клас.

Працює BufferedInputStream

BufferedInputStreamПідтримує внутрішній буфер 8192 байт .

Під час операції зчитування в BufferedInputStream, частина байтів зчитується з диска і зберігається у внутрішньому буфері. А з внутрішнього буфера байти зчитуються окремо.

Отже, кількість зв'язку на диск зменшується. Ось чому читання байтів відбувається швидше за допомогою BufferedInputStream.

Створіть BufferedInputStream

Для того, щоб створити BufferedInputStream, ми повинні java.io.BufferedInputStreamспочатку імпортувати пакет. Як тільки ми імпортуємо пакет, ось як ми можемо створити вхідний потік.

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

У наведеному вище прикладі ми створили BufferdInputStreamіменований буфер із FileInputStreamназваним файлом.

Тут внутрішній буфер має розмір за замовчуванням 8192 байт. Однак ми також можемо вказати розмір внутрішнього буфера.

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

Буфер допоможе швидше прочитати байти з файлів.

Методи BufferedInputStream

BufferedInputStreamКлас забезпечує реалізації для різних методів представлення в InputStreamкласі.

метод read ()

  • read() - зчитує один байт із вхідного потоку
  • read(byte() arr) - зчитує байти з потоку та зберігає у вказаному масиві
  • read(byte() arr, int start, int length) - зчитує з потоку кількість байтів, рівну довжині, і зберігає у зазначеному масиві, починаючи з початку позиції

Припустимо, у нас є файл із назвою input.txt із таким вмістом.

 This is a line of text inside the file. 

Спробуємо прочитати файл за допомогою 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(); ) ) ) 

Вихідні дані

 Це рядок тексту всередині файлу. 

У наведеному вище прикладі ми створили буферизований вхідний потік з назвою buffer разом з FileInputStream. Вхідний потік пов'язаний з файлом input.txt .

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

Тут ми використали read()метод для зчитування масиву байтів із внутрішнього буфера буферованого зчитувача.

доступний () метод

Щоб отримати кількість доступних байт у вхідному потоці, ми можемо використовувати available()метод. Наприклад,

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

Вихідні дані

 Доступні байти на початку: 39 Доступні байти в кінці: 36 

У наведеному вище прикладі

  1. Спочатку ми використовуємо available()метод, щоб перевірити кількість доступних байтів у вхідному потоці.
  2. Потім ми використовували read()метод 3 рази, щоб прочитати 3 байти з вхідного потоку.
  3. Тепер, прочитавши байти, ми знову перевірили доступні байти. Цього разу доступні байти зменшились на 3.

метод skip ()

Щоб відкинути та пропустити вказану кількість байтів, ми можемо скористатися skip()методом. Наприклад,

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

Вихідні дані

 Вхідний потік після пропуску 5 байт: це рядок тексту всередині файлу. 

У наведеному вище прикладі ми використовували skip()метод, щоб пропустити 5 байт з потоку введення файлу. Таким чином, байти 'T', 'h', 'i', 's'і ' 'пропускаються з вхідного потоку.

метод close ()

Щоб закрити буферизований вхідний потік, ми можемо використати close()метод. Після виклику close()методу ми не можемо використовувати вхідний потік для зчитування даних.

Інші методи буферованого вводу потоку

Методи Описи
mark() позначте позицію у вхідному потоці, до якої були прочитані дані
reset() повертає елемент керування до точки у вхідному потоці, де була встановлена ​​позначка

Щоб дізнатись більше, відвідайте Java BufferdInputStream (офіційна документація Java).

Цікаві статті...