Hướng dẫn và ví dụ Java BufferedInputStream
1. BufferedInputStream
BufferedInputStream là một lớp con của InputStream, được sử dụng để đơn giản hoá việc đọc văn bản từ các luồng đầu vào nhị phân (binary input stream), và nâng cao hiệu suất của chương trình.
- InputStream
- FileInputStream
- ByteArrayInputStream
- PushbackInputStream
- PipedInputStream
- SequenceInputStream
- DataInputStream
- FilterInputStream
- FilterInputStream
- ObjectInputStream
- AudioInputStream
- CheckedInputStream
- DigestInputStream
- DeflaterInputStream
- CipherInputStream
Nguyên tắc hoạt động của BufferedInputStream giống như hình minh hoạ dưới đây:
BufferedInputStream gói bên trong nó một đối tượng InputStream, đối tượng này sẽ tự động đọc dữ liệu từ nguồn gốc (chẳng hạn file) và lưu trữ vào buffer (bộ đệm) của BufferedInputStream.
BufferedInputStream ghi đè (override) các phương thức thừa kế từ lớp cha của nó, chẳng hạn như read(), read(byte[]),... để đảm bảo rằng chúng sẽ thao tác với dữ liệu từ buffer chứ không phải từ nguồn gốc (chẳng hạn file).
Cái gọi là "buffer" được đề cập ở phía trên thực tế chỉ là một mảng byte. Đối tượng InputStream (của BufferedInputStream) sẽ tự động đọc các bytes từ nguồn gốc để lưu trữ vào mảng này.
BufferedInputStream đọc các bytes từ mảng buffer và giải phóng các vị trí đã đọc, các vị trí được giải phóng sẽ được sử dụng để lưu trữ các bytes mới đọc được từ nguồn gốc.
BufferedInputStream constructors
BufferedInputStream(InputStream in, int size)
BufferedInputStream(InputStream in)
- Contructor BufferedInputStream(InputStream,int) tạo ra một đối tượng BufferedInputStream với mảng buffer có kích thước được chỉ định.
- Contructor BufferedInputStream(InputStream) tạo ra một đối tượng BufferedInputStream với mảng buffer có kích thước mặc định (size = 8192).
2. mark() & reset()
Một khía cạnh thú vị của BufferedInputStream đó là nó hỗ trợ mark() và reset(), hai phương thức được thừa kế từ InputStream. Không phải tất cả các lớp con của InputStream đều hỗ trợ 2 phương thức này. Về cơ bản bạn có thể gọi phương thức markSupported() để kiểm tra xem 2 phương thức trên có được hỗ trợ hay không.
Xem thêm giải thích chi tiết về hai phương thức mark() và reset() trong bài viết về InputStream:
3. Examples
Để tạo một đối tượng BufferedInputStream chúng ta cần tạo một đối tượng InputStream để đọc dữ liệu từ nguồn gốc (chẳng hạn từ File). Vì InputStream là một lớp trừu tượng vì vậy bạn cần tạo nó từ một trong các lớp con của nó.
Ví dụ: Tạo một BufferedInputStream với kích thước mảng buffer là 16384. Điều đó có nghĩa là buffer này có dung lượng 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);
Tạo một BufferedInputStream với kích thước mảng buffer mặc định (8192), tương đương với 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);
Ví dụ: Sử dụng BufferedInputStream để đọc một file.
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
Ví dụ: Sử dụng BufferedInputStream để đọc một URL, giúp nâng cao hiệu suất của chương trình.
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();
}
}
Các hướng dẫn Java IO
- Hướng dẫn và ví dụ Java CharArrayWriter
- Hướng dẫn và ví dụ Java FilterReader
- Hướng dẫn và ví dụ Java FilterWriter
- Hướng dẫn và ví dụ Java PrintStream
- Hướng dẫn và ví dụ Java BufferedReader
- Hướng dẫn và ví dụ Java BufferedWriter
- Hướng dẫn và ví dụ Java StringReader
- Hướng dẫn và ví dụ Java StringWriter
- Hướng dẫn và ví dụ Java PipedReader
- Hướng dẫn và ví dụ Java LineNumberReader
- Hướng dẫn và ví dụ Java PushbackReader
- Hướng dẫn và ví dụ Java PrintWriter
- Hướng dẫn sử dụng luồng vào ra nhị phân trong Java
- Hướng dẫn sử dụng luồng vào ra ký tự trong Java
- Hướng dẫn và ví dụ Java BufferedOutputStream
- Hướng dẫn và ví dụ Java ByteArrayOutputStream
- Hướng dẫn và ví dụ Java DataOutputStream
- Hướng dẫn và ví dụ Java PipedInputStream
- Hướng dẫn và ví dụ Java OutputStream
- Hướng dẫn và ví dụ Java ObjectOutputStream
- Hướng dẫn và ví dụ Java PushbackInputStream
- Hướng dẫn và ví dụ Java SequenceInputStream
- Hướng dẫn và ví dụ Java BufferedInputStream
- Hướng dẫn và ví dụ Java Reader
- Hướng dẫn và ví dụ Java Writer
- Hướng dẫn và ví dụ Java FileReader
- Hướng dẫn và ví dụ Java FileWriter
- Hướng dẫn và ví dụ Java CharArrayReader
- Hướng dẫn và ví dụ Java ByteArrayInputStream
- Hướng dẫn và ví dụ Java DataInputStream
- Hướng dẫn và ví dụ Java ObjectInputStream
- Hướng dẫn và ví dụ Java InputStreamReader
- Hướng dẫn và ví dụ Java OutputStreamWriter
- Hướng dẫn và ví dụ Java InputStream
- Hướng dẫn và ví dụ Java FileInputStream
Show More
- Hướng dẫn lập trình Java Servlet/JSP
- Các hướng dẫn Java New IO
- Các hướng dẫn Spring Cloud
- Các hướng dẫn Java Oracle ADF
- Các hướng dẫn Java Collections Framework
- Java cơ bản
- Các hướng dẫn Java Date Time
- Các thư viện mã nguồn mở Java
- Các hướng dẫn Java Web Services
- Các hướng dẫn Struts2 Framework
- Các hướng dẫn Spring Boot