openplanning

Hướng dẫn và ví dụ Java BufferedOutputStream

  1. BufferedOutputStream
  2. Examples

1. BufferedOutputStream

BufferedOutputStream là một lớp con của OutputStream, được sử dụng để đơn giản hoá việc ghi văn bản vào một luồng đầu ra nhị phân (binary output stream), và nâng cao hiệu suất của chương trình.
Nguyên tắc hoạt động của BufferedOutputStream giống như hình minh hoạ dưới đây:
BufferedOutputStream gói bên trong nó một đối tượng OutputStream, đối tượng này làm nhiệm vụ ghi dữ liệu vào mục tiêu (chẳng hạn file).
BufferedOutputStream ghi đè (override) các phương thức được thừa kế từ lớp cha của nó, chẳng hạn như write(), write(byte[]),... để đảm bảo rằng dữ liệu sẽ được ghi vào buffer chứ không phải ghi vào mục tiêu (chẳng hạn file). Nhưng khi buffer đầy, tất cả dữ liệu trên buffer sẽ được đẩy vào OutputStream và giải phóng buffer. Bạn cũng có thể gọi phương thức BufferedOutputStream.flush() để chủ động đẩy tất cả dữ liệu trên buffer sang OutputStream và giải phóng buffer. Dữ liệu cũng được đẩy từ buffer sang OutputStream khi gọi phương thức BufferedOutputStream.close().
Cái gọi là "buffer" được đề cập ở phía trên thực tế chỉ là một mảng byte. Bạn có thể chỉ định kích thước của mảng này khi khởi tạo đối tượng BufferedOutputStream.
Các dữ liệu được ghi tạm vào buffer sẽ giảm thiểu việc ghi liên tục với mục tiêu (chẳng hạn file trên ổ cứng) vì vậy nâng cao hiệu xuất của chương trình.
BufferedOutputStream constructors
BufferedOutputStream(OutputStream out)    

BufferedOutputStream(OutputStream out, int size)
  • Contructor BufferedOutputStream(OutputStream,int) tạo ra một đối tượng BufferedOutputStream với mảng buffer có kích thước được chỉ định.
  • Contructor BufferedOutputStream(OutputStream) tạo ra một đối tượng BufferedOutputStream với mảng buffer có kích thước mặc định (size = 8192).

2. Examples

Ví dụ: Tạo một BufferedOutputStream với kích thước mảng buffer16384. Điều đó có nghĩa là buffer này có dung lượng 16384 bytes (16 KB).
File outFile = new File("/Volumes/Data/test/outfile.txt");
outFile.getParentFile().mkdirs(); // Create parent folder.

// Create OutputStream to write a file.
OutputStream os = new FileOutputStream(outFile);

// Create a BufferedOutputStream with buffer array size of 16384 (16384 bytes = 16 KB).
BufferedOutputStream br = new BufferedOutputStream(os, 16384);
Tạo một BufferedOutputStream với kích thước mảng buffer mặc định (8192), tương đương với 8192 bytes (8 KB).
File outFile = new File("/Volumes/Data/test/outfile.txt");
outFile.getParentFile().mkdirs(); // Create parent folder.

// Create OutputStream to write a file.
OutputStream os = new FileOutputStream(outFile);

// Create a BufferedOutputStream with default buffer array size of 8192 (8192 bytes = 8 KB).
BufferedOutputStream br = new BufferedOutputStream(os);
Code đầy đủ của ví dụ:
BufferedOutputStreamEx1.java
package org.o7planning.bufferedoutputstream.ex;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class BufferedOutputStreamEx1 {

    private static final String file_path = "/Volumes/Data/test/outfile.txt";

    public static void main(String[] args) throws IOException {
        File outFile = new File(file_path);
        outFile.getParentFile().mkdirs(); // Create parent folder.

        // Create OutputStream to write a file.
        OutputStream os = new FileOutputStream(outFile);

        // Create a BufferedOutputStream with buffer array size of 16384 (16384 bytes = 16 KB).
        BufferedOutputStream br = new BufferedOutputStream(os, 16384);

        br.write("JP".getBytes("UTF-8"));
        br.write('\n');
        br.write("日本".getBytes("UTF-8"));
        br.write('\n');
        br.flush();

        br.write('\n');
        br.write("八洲".getBytes("UTF-8"));

        br.close();
    }
}
Output:
outfile.txt
JP
日本

八洲

Các hướng dẫn Java IO

Show More