Класс BufferedInputStream в Java
Класс BufferedInputStream
В этом руководстве мы узнаем о Java BufferedInputStream и его методах с помощью примеров.
BufferedInputStream
класс java.io
package используется с другими входными потоками для более эффективного чтения данных (в байтах).
Он расширяет 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(byte[] arr)
- считывает байты из потока и сохраняет в указанном массивеread(byte[] arr, int start, int length)
- считывает количество байтов, равное length из потока и сохраняет в указанном массиве, начиная с позиции start
Предположим, у нас есть файл с именем 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();
}
}
}
Вывод
This is a line of text inside the file.
В приведенном выше примере мы создали буферизованный входной поток с именем 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();
}
}
}
Вывод
Available bytes at the beginning: 39 Available bytes at the end: 36
В приведенном выше примере
- Сначала мы используем
available()
метод для проверки количества доступных байтов во входном потоке. - Затем мы использовали
read()
метод 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();
}
}
}
Вывод
Input stream after skipping 5 bytes: is a line of text inside the file.
В приведенном выше примере мы использовали skip()
способ пропустить 5 байтов из входного потока файла. Следовательно, байты 'T'
, 'h'
, 'i'
, 's'
и ' '
пропускаются из входного потока.
Метод close()
Чтобы закрыть буферизованный входной поток, мы можем использовать close()
метод. Как только close()
вызывается метод, мы не можем использовать входной поток для чтения данных.
Другие методы BufferedInputStream
Методы | Описания |
---|---|
mark() | отметить позицию во входном потоке, до которой были прочитаны данные |
reset() | возвращает элемент управления в точку во входном потоке, где была установлена метка |
Чтобы узнать больше, посетите Java BufferdInputStream (официальная документация по Java).
java