Lớp InputStream và OutputStream trong Java

Đây là bài 48/62 bài của series môn học Ngôn ngữ lập trình Java

1. I/O Stream trong Java

Trong Java, dòng (stream) – còn gọi là luồng, là chuỗi dữ liệu được đọc (read) từ nơi được lưu trữ (data source) và được ghi (write) tới nơi cần lưu trữ (data destination). Input stream được sử dụng để đọc dữ liệu từ data source. Output stream được sử dụng để ghi dữ liệu vào data destination.

stream là gì
input stream
stream là gì
output stream

Tùy thuộc vào dữ liệu mà một dòng (stream) lưu giữ, nó có thể được phân loại thành:

    • Dòng Byte (Byte Stream)
    • Dòng ký tự (Character Stream)

Dòng Byte (Byte Stream) được sử dụng để đọc và ghi một byte (8 bit) của dữ liệu (data). Tất cả các lớp xử lý dòng byte đều kế thừa từ các lớp abstract InputStream OutputStream.

Dòng ký tự (Character Stream) được sử dụng để đọc và ghi một ký tự của dữ liệu (data). Tất cả các lớp xử lý dòng ký tự đều kế thừa từ các lớp abstract Reader Writer.

2. Lớp InputStream trong Java

Lớp abstract InputStream trong Java nằm trong package java.io giúp xử lý input stream của dòng Byte (Byte Stream). Không thể tạo đối tượng của lớp InputStream mà có thể tạo các đối tượng của các lớp kế thừa nó để đọc dữ liệu (data).

Các lớp kế thừa lớp abstract InputStream trong Java là FileInputStream, ByteArrayInputStream, ObjectInputStreamBufferedInputStream.

Subclasses của InputStream trong Java

Tạo ra một InputStream

Đầu tiên, cần import java.io.InputStream. Sau đó, tạo InputStream với các đối tượng của các lớp con của nó.

// Creates an InputStream
InputStream object1 = new FileInputStream();

Trong ví dụ trên, chúng ta tạo một InputStream sử dụng FileInputStream. Chúng ta cũng có thể tạo InputStream với các lớp con khác của.

Các phương thức của InputStream

InputStream giúp đọc dữ liệu theo từng byte. Các phương thức thông dụng của InputStream để thao tác với byte là:

  • read() đọc một byte dữ liệu từ input stream
  • read(byte[] array) đọc các byte dữ liệu từ stream và lưu trữ các byte đọc được vào mảng (array)
  • available() trả về số byte có sẵn trong input stream
  • skips() bỏ qua và giải phóng một số byte từ input stream
  • close() đóng kết nối input stream

Ví dụ sử dụng InputStream với lớp con là FileInputStream

Chúng ta muốn đọc một file input.txt nằm trong phân vùng D. Chúng ta cần tạo ra một InputStream với lớp con là FileInputStream.

import java.io.FileInputStream;
import java.io.InputStream;
class Main {
  public static void main(String args[]) {
    byte[] array = new byte[100];
    try {
      InputStream input = new FileInputStream("D:\\input.txt");
      System.out.println("Available bytes in the file: " + input.available());
      // Read byte from the input stream
      input.read(array);
      System.out.println("Data read from the file: ");
      // Convert byte array into string
      String data = new String(array);
      System.out.println(data);
      // Close the input stream
      input.close();
    } catch (Exception e) {
      e.getStackTrace();
    }
  }
}
Kết quả
Available bytes in the file: 38
Data read from the file: 
This is a line of text inside the file

3. Lớp OutputStream trong Java

Lớp abstract OutputStream nằm trong package java.io giúp xử lý output stream của dòng Byte (Byte Stream). Không thể tạo đối tượng của lớp OutputStream mà có thể tạo các đối tượng của các lớp kế thừa nó để ghi dữ liệu (data).

Các lớp kế thừa lớp abstract OutputStreamFileOutputStream, ByteArrayOutputStream, ObjectOutputStreamBufferedOutputStream.

Subclasses của OutputStream trong Java

Tạo ra một OutputStream

Đầu tiên, cần import java.io.OutputStream. Sau đó, tạo OutputStream với các đối tượng của các lớp con của nó.

// Creates an OutputStream
OutputStream object1 = new FileOutputStream();

Trong ví dụ trên, chúng ta tạo một OutputStream sử dụng FileOutputStream. Chúng ta cũng có thể tạo OutputStream với các lớp con khác của.

Các phương thức của OutputStream

OutputStream giúp ghi dữ liệu theo từng byte. Các phương thức thông dụng của OutputStream để thao tác với byte là:

  • write() ghi byte dữ liệu vào output stream
  • write(byte[] array) ghi các byte dữ liệu từ một mảng (array) vào output stream
  • flush() bắt buộc phải ghi tất cả dữ liệu có trong output stream đến nơi cần lưu trữ dữ liệu (data destination)
  • close() đóng kết nối output stream

Ví dụ sử dụng OutputStream với lớp con là FileOutputStream

import java.io.FileOutputStream;
import java.io.OutputStream;
public class Main {
    public static void main(String args[]) {
        String data = "This is a line of text inside the file.";
        try {
            OutputStream out = new FileOutputStream("D:\\output.txt");
            // Converts the string into bytes
            byte[] dataBytes = data.getBytes();
            // Writes data to the output stream
            out.write(dataBytes);
            System.out.println("Data is written to the file.");
            // Closes the output stream
            out.close();
        }
        catch (Exception e) {
            e.getStackTrace();
        }
    }
}
Kết quả
Data is written to the file.

Trong ví dụ trên, chúng ta muốn ghi dữ liệu vào file output.txt nằm trong phân vùng D. Chúng ta cần tạo ra một OutputStream với lớp con là FileOutputStream.

5/5 - (1 bình chọn)
Bài trước và bài sau trong môn học<< Java collections framework: Iterator interface và ListIterator interfaceLớp FileInputStream và FileOutputStream trong Java >>
Chia sẻ trên mạng xã hội:

Trả lời

Lưu ý:

1) Vui lòng bình luận bằng tiếng Việt có dấu.

2) Khuyến khích sử dụng tên thật và địa chỉ email chính xác.

3) Mọi bình luận trái quy định sẽ bị xóa bỏ.