Trong hướng dẫn này, chúng ta sẽ tìm hiểu về BufferedInputStream trong Java và các phương thức của nó với sự trợ giúp của các ví dụ.
lớp BufferedInputStream của gói java.io phần mềm được sử dụng với các dòng đầu vào khác để đọc dữ liệu (tính theo byte) một cách hiệu quả hơn.
Nó mở rộng lớp InputStream trừu tượng.
Nội dung chính
1. Hoạt động của BufferedInputStream
Nó BufferedInputStream duy trì một bộ đệm bên trong 8192 byte .
Trong quá trình đọc trong BufferedInputStream, một đoạn byte được đọc từ đĩa và được lưu trữ trong bộ đệm bên trong. Và từ các byte đệm bên trong được đọc riêng lẻ.
Do đó, số lượng thông tin liên lạc đến đĩa bị giảm. Đây là lý do tại sao đọc byte nhanh hơn bằng cách sử dụng BufferedInputStream.
2. Tạo một dòng BufferedInputStream
Để tạo một trước tiên chúng ta phải nhập gói BufferedInputStream, java.io.BufferedInputStream. Khi chúng tôi nhập gói ở đây là cách chúng tôi có thể tạo luồng đầu vào.
// Creates a FileInputStream
FileInputStream file = new FileInputStream(String path);
// Creates a BufferedInputStream
BufferedInputStream buffer = new BufferInputStream(file);
Trong ví dụ trên, chúng tôi đã tạo ra một BufferdInputStream tên đệm với cái FileInputStream tên tập tin.
Ở đây, bộ đệm bên trong có kích thước mặc định là 8192 byte. Tuy nhiên, chúng tôi cũng có thể chỉ định kích thước của bộ đệm bên trong.
// Creates a BufferedInputStream with specified size internal buffer
BufferedInputStream buffer = new BufferInputStream(file, int size);
Các đệm sẽ giúp đọc byte từ tệp nhanh hơn.
3. Phương thức BufferedInputStream
lớp BufferedInputStream cung cấp triển khai cho các phương thức khác nhau trình bày trong lớp InputStream.
3.1 phương thức read()
- read() – đọc một byte đơn từ luồng đầu vào
- read(byte[] arr) – đọc các byte từ luồng và lưu trữ trong mảng được chỉ định
- read(byte[] arr, int start, int length) – đọc số byte bằng chiều dài từ luồng và lưu trữ trong mảng được chỉ định bắt đầu từ vị trí khởi đầu
Giả sử chúng ta có một tệp có tên input.txt với nội dung như sau.
This is a line of text inside the file.
Hãy thử đọc tệp bằng cách sử dụng 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();
}
}
}
Đầu ra
This is a line of text inside the file.
Trong ví dụ trên, chúng tôi đã tạo một luồng đầu vào được đệm có tên đệm cùng với FileInputStream. Luồng đầu vào được liên kết với tệp input.txt .
FileInputStream file = new FileInputStream("input.txt");
BufferedInputStream buffer = new BufferedInputStream(file);
Ở đây, chúng tôi đã sử dụng phương thức read() để đọc một mảng byte từ bộ đệm bên trong của bộ đọc đệm.
3.2 phương thức available()
Để có được số byte có sẵn trong luồng đầu vào, chúng ta có thể sử dụng phương thức available() . Ví dụ,
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();
}
}
}
Đầu ra
Available bytes at the beginning: 39
Available bytes at the end: 36
Trong ví dụ trên,
- Đầu tiên chúng tôi sử dụng phương thức available() để kiểm tra số lượng byte có sẵn trong luồng đầu vào.
- Sau đó, chúng tôi đã sử dụng phương thức read()3 lần để đọc 3 byte từ luồng đầu vào.
- Bây giờ, sau khi đọc các byte, chúng tôi lại kiểm tra các byte có sẵn. Lần này số byte khả dụng giảm đi 3.
3.3 phương thức skip()
Để loại bỏ và bỏ qua số byte được chỉ định, chúng ta có thể sử dụng phương thức skip(). Ví dụ,
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();
}
}
}
Đầu ra
Input stream after skipping 5 bytes: is a line of text inside the file.
Trong ví dụ trên, chúng tôi đã sử dụng phương thức skip() bỏ qua 5 byte từ luồng đầu vào tệp. Do đó, các byte ‘T’, ‘h’, ‘i’, ‘s’và ‘ ‘được bỏ qua từ dòng đầu vào.
3.4 phương thức close()
Để đóng luồng đầu vào được đệm, chúng ta có thể sử dụng phương thức close(). Khi close()phương thức được gọi, chúng ta không thể sử dụng luồng đầu vào để đọc dữ liệu.
4. Các phương thức khác của BufferedInputStream
Phương thức | Mô tả |
mark() | đánh dấu vị trí trong luồng đầu vào mà dữ liệu đã được đọc |
reset() | trả lại điều khiển về điểm trong luồng đầu vào nơi đặt dấu |
Để tìm hiểu thêm, hãy truy cập Java BufferdInputStream (tài liệu Java chính thức) .
Cài ứng dụng cafedev để dễ dàng cập nhật tin và học lập trình mọi lúc mọi nơi tại đây.
Nguồn và Tài liệu tiếng anh tham khảo:
Tài liệu từ cafedev:
- Full series tự học Java từ cơ bản tới nâng cao tại đây nha.
- Ebook về Java tại đây.
- Các nguồn kiến thức MIỄN PHÍ VÔ GIÁ từ cafedev tại đây
Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:
Chào thân ái và quyết thắng!