Java: Byte Stream

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Chương trình sử dụng các byte stream để thực hiện input và output các byte 8-bit. Tất cả các lớp byte steam có nguồn gốc từ InputStream và OutputStream.

Có rất nhiều lớp byte stream. Để minh họa cách thức làm việc của byte stream, chúng ta sẽ tập trung vào các tập tin I/O byte stream là FileInputStream và FileOutputStream. Các loại khác của byte stream được sử dụng trong nhiều cách tương tự nhau; chúng khác nhau chủ yếu ở cách chúng được xây dựng.

Cách dùng Byte Stream

Chúng ta sẽ khám phá FileInputStream và FileOutputStream bằng cách kiểm tra một chương trình ví dụ dưới đây có tên là CopyBytes, trong đó sử dụng byte stream để sao chép tập tin xanadu.txt, mỗi lần sao chép một byte.

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class CopyBytes {
  public static void main(String[] args) throws IOException {

    FileInputStream in = null;
    FileOutputStream out = null;
    int c;

    try {
      in = new FileInputStream("input.txt");
      out = new FileOutputStream("output.txt");

      while ((c = in.read()) != -1) {
        out.write(c);
      }
    } finally {
      if (in != null) {
        in.close();
      }
      if (out != null) {
        out.close();
      }
    }
  }
}

Lớp CopyBytes dành phần lớn thời gian của nó trong một vòng lặp đơn giản để đọc dòng đầu vào và ghi dòng đầu ra, từng byte tại mỗi thời điểm như thể hiện trong hình dưới đây.

Simple dòng byte đầu vào và đầu ra.
Byte Strem input và output đơn giản.

Luôn luôn đóng Stream

Đóng stream khi nó không còn cần thiết là rất quan trọng, quan trọng đến nỗi CopyBytes sử dụng khối finally để đảm bảo rằng cả hai stream sẽ được đóng cho dù có lỗi xảy ra hay không. Việc này cũng giúp tránh rò rỉ tài nguyên nghiêm trọng.

Một lỗi có thể là CopyBytes đã không thể mở một hoặc cả hai tập tin. Khi điều đó xảy ra, biến stream tương ứng với các tập tin không bao giờ thay đổi giá trị null được khởi tạo từ đầu. Đó là lý do tại sao CopyBytes đảm bảo rằng mỗi biến stream chứa một tham chiếu đối tượng trước khi gọi phương thức close().

Khi không sử dụng Byte Streams

CopyBytes có vẻ giống như một chương trình bình thường, nhưng nó thực sự đại diện cho một loại I/O ở mức thấp mà bạn nên tránh. Vì xanadu.txt chứa dữ liệu ký tự, nên cách tốt nhất là sử dụng character stream được trình bày ở bài viết tiếp theo. Ngoài ra còn có stream với nhiều loại dữ liệu phức tạp hơn. Byte Stream chỉ nên được sử dụng cho I/O nguyên thủy nhất.

Nhưng, tại sao ta lại nói về byte stream? Bởi vì tất cả các loại stream khác được xây dựng dựa trên byte stream.

» Tiếp: Character Stream
« Trước: Giới thiệu I/O Stream
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!