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

Изход

 Това е ред с текст във файла. 

В горния пример създадохме буфериран входен поток, наречен буфер, заедно с 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).

Интересни статии...