Руководство Java BufferedInputStream
1. BufferedInputStream
BufferedInputStream являетсяподклассом InputStream, который используется для упрощения чтения текста из двоичных входных потоков (binary input stream) и повышения производительности программы.
- InputStream
- FileInputStream
- ByteArrayInputStream
- PushbackInputStream
- PipedInputStream
- SequenceInputStream
- DataInputStream
- FilterInputStream
- FilterInputStream
- ObjectInputStream
- AudioInputStream
- CheckedInputStream
- DigestInputStream
- DeflaterInputStream
- CipherInputStream
Принцип работы BufferedInputStream выглядит следующим образом:
BufferedInputStream обертывает внутри него объект InputStream, который автоматически считывает данные из источника (например, файл) и сохраняет их в buffer (буфере) of BufferedInputStream.
BufferedInputStream переопределяет (override) методы, которые наследуются от его родительского класса, такие как read(), read(byte[]),...чтобы гарантировать, что они будут манипулировать данными из buffer, а не из источника (например, файла).
Так называемый "buffer", упомянутый выше, на самом деле является просто массивом byte. Объект InputStream (of BufferedInputStream) автоматически считывает bytes из источника для хранения в этом массиве.
BufferedInputStream считывает bytes из массива buffer и освобождает прочитанные места. Освобожденные места будут использоваться для хранения только что прочитанных bytes из источника.
BufferedInputStream constructors
BufferedInputStream(InputStream in, int size)
BufferedInputStream(InputStream in)
- Конструктор BufferedInputStream(InputStream,int) создает объект BufferedInputStream с массивом buffer указанного размера.
- Конструктор BufferedInputStream(InputStream) создает объект BufferedInputStream с массивом buffer размера по умолчанию (size = 8192).
2. mark() & reset()
Интересным аспектом BufferedInputStream является то, что он поддерживает mark() и reset(), два метода унаследованы от InputStream. Не все подклассы InputStream поддерживают эти два метода. В принципе, вы можете вызвать метод markSupported(), чтобы проверить, поддерживаются ли вышеуказанные 2 метода.
Более подробное объяснение методов mark() и reset() см. в статье о InputStream:
3. Examples
Чтобы создать объект BufferedInputStream, нам нужно создать объект InputStream для чтения данных из источника (например, из файла). Поскольку InputStream является абстрактным классом, вам необходимо создать его из одного из его подклассов.
Например: Создаем BufferedInputStream с размером массива buffer16384. Это означает, что размер этого buffer составляет 16384 bytes (16 KB).
// Create InputStream to read a file.
InputStream is = new FileInputStream("/Volumes/Data/test/test.txt");
// Create a BufferedInputStream with buffer array size of 16384 (16 KB).
BufferedReader br = new BufferedReader(is, 16384);
Создаем BufferedInputStream с размером массива buffer по умолчанию (8192), который эквивалентен 8192 bytes (8 KB).
// Create Reader to read a file.
Reader reader = new FileReader("/Volumes/Data/test/test.txt");
// Create a BufferedReader with default buffer array size of 8192 (16384 bytes = 16 KB).
BufferedReader br = new BufferedReader(reader);
Например: Использование BufferedInputStream для чтения файла.
test.txt
This is the Latin text
BufferedInputStreamEx1.java
package org.o7planning.bufferedinputstream.ex;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class BufferedInputStreamEx1 {
// C:/test/test.txt
private static String file_path = "/Volumes/Data/test/test.txt";
public static void main(String[] args) throws IOException {
File file = new File(file_path);
InputStream is = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(is);
int code;
while((code = bis.read())!= -1) {
System.out.println(code +" " + (char)code);
}
bis.close();
}
}
Output:
84 T
104 h
105 i
115 s
32
105 i
115 s
32
116 t
104 h
101 e
32
76 L
97 a
116 t
105 i
110 n
32
116 t
101 e
120 x
116 t
10
Например: Использование BufferedInputStream для чтения URL-адреса для повышения производительности программы.
BufferedInputStreamEx2.java
package org.o7planning.bufferedinputstream.ex;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
public class BufferedInputStreamEx2 {
private static String urlString = "https://s3.o7planning.com/images/smile-32.png";
public static void main(String[] args) throws IOException {
URL url = new URL(urlString);
InputStream is = url.openConnection().getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
int code;
while ((code = bis.read()) != -1) {
System.out.print((char) code);
}
bis.close();
}
}
Руководства Java IO
- Руководство Java CharArrayWriter
- Руководство Java FilterReader
- Руководство Java FilterWriter
- Руководство Java PrintStream
- Руководство Java BufferedReader
- Руководство Java BufferedWriter
- Руководство Java StringReader
- Руководство Java StringWriter
- Руководство Java PipedReader
- Руководство Java LineNumberReader
- Руководство Java PushbackReader
- Руководство Java PrintWriter
- Руководство Java IO Binary Streams
- Руководство Java IO Character Streams
- Руководство Java BufferedOutputStream
- Руководство Java ByteArrayOutputStream
- Руководство Java DataOutputStream
- Руководство Java PipedInputStream
- Руководство Java OutputStream
- Руководство Java ObjectOutputStream
- Руководство Java PushbackInputStream
- Руководство Java SequenceInputStream
- Руководство Java BufferedInputStream
- Руководство Java Reader
- Руководство Java Writer
- Руководство Java FileReader
- Руководство Java FileWriter
- Руководство Java CharArrayReader
- Руководство Java ByteArrayInputStream
- Руководство Java DataInputStream
- Руководство Java ObjectInputStream
- Руководство Java InputStreamReader
- Руководство Java OutputStreamWriter
- Руководство Java InputStream
- Руководство Java FileInputStream
Show More