0
0
Lập trình
Admin Team
Admin Teamtechmely

Tìm Hiểu Về Java IO: Xử Lý Dữ Liệu Đầu Vào Và Đầu Ra Trong Java

Đăng vào 3 tuần trước

• 4 phút đọc

Giới thiệu về Java IO

Java IO (Java Input and Output) là một phần trong Java SE, cung cấp những công cụ cần thiết để xử lý dữ liệu từ bên ngoài ứng dụng Java. Cũng như con người có thể cảm nhận và giao tiếp với thế giới xung quanh qua các giác quan, Java IO giúp các ứng dụng Java tương tác với các nguồn dữ liệu bên ngoài.

Nguồn Dữ Liệu Bên Ngoài Ứng Dụng Java

Các nguồn dữ liệu bên ngoài có thể bao gồm:

  • File: Các tệp được lưu trữ trên ổ cứng.
  • Console: Nhập và hiển thị thông tin qua ứng dụng Console hoặc Terminal.
  • Socket: Đọc ghi dữ liệu thông qua kết nối TCP hoặc UDP.

Khái Niệm Stream Trong Java IO

Java IO sử dụng khái niệm Stream để thực hiện các thao tác với dữ liệu. Stream có thể được hiểu như một dòng chảy liên tục dữ liệu. Các dữ liệu khi được xử lý lần lượt theo thứ tự từ đầu vào (InputStream) đến đầu ra (OutputStream). Bạn có thể hình dung như một dòng suối, nơi mà dữ liệu được chuyền đi giống như các khúc gỗ trôi theo dòng nước. Mỗi cây gỗ tương ứng với một byte và mỗi khúc gỗ là một bit.

InputStream và OutputStream

InputStream và OutputStream là hai lớp cơ sở cho mọi loại stream khác trong Java. Chúng cung cấp các phương thức để bạn đọc và ghi dữ liệu:

java Copy
public abstract class InputStream implements Closeable {
    public abstract int read() throws IOException;
    public int read(byte b[]) throws IOException;
    // Các phương thức khác...
}
java Copy
public abstract class OutputStream implements Closeable, Flushable {
    public abstract void write(int b) throws IOException;
    public void write(byte b[]) throws IOException;
    // Các phương thức khác...
}

Mặc dù cả hai lớp đều đọc và ghi dữ liệu, nhưng InputStream trả về dữ liệu dưới dạng byte, trong khi OutputStream cho phép ghi ra dữ liệu qua các phương thức khác nhau.

Ví Dụ Cơ Bản Với InputStream và OutputStream

Dưới đây là một ví dụ đơn giản về việc đọc dữ liệu từ tệp input.txt và ghi dữ liệu vào tệp output.txt.

java Copy
import java.io.*;

public class CopyBytes {
    public static void main(String[] args) throws IOException {
        InputStream in = null;
        OutputStream out = null;
        try {
            in = new FileInputStream("input.txt");
            out = new FileOutputStream("output.txt");
            int c;
            while ((c = in.read()) != -1) {
                out.write(c);
            }
        } finally {
            if (in != null) in.close();
            if (out != null) out.close();
        }
    }
}

Buffered Stream

Khi làm việc với các tệp lớn, việc đọc từng byte một sẽ rất tốn thời gian. Để tối ưu hóa, Java cung cấp BufferedInputStream và BufferedOutputStream, cho phép ghi và đọc nhiều byte cùng một lúc.

java Copy
BufferedInputStream in = new BufferedInputStream(new FileInputStream("input.txt"));
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("output.txt"));

Khám Phá Reader và Writer

Khi làm việc với văn bản, chúng ta thường cần xử lý nhiều định dạng ký tự khác nhau, như UTF-8, UTF-16, hay ASCII. Với mỗi định dạng, Reader và Writer sẽ giúp bạn dễ dàng hơn khi làm việc với các ký tự, thay vì byte.

java Copy
public abstract class Reader implements Readable, Closeable {
    public int read() throws IOException;
    // Các phương thức khác...
}

Để so sánh, InputStream bao gồm cách đọc data dưới dạng byte, trong khi Reader giúp chuyển đổi byte thành ký tự theo định dạng đã cho.

Kết Luận

Thông qua bài viết này, bạn đã cùng tôi khám phá những kiến thức cơ bản về Java IO: stream, buffer, reader và writer. Việc hiểu rõ cách hoạt động của Java IO sẽ giúp bạn phát triển ứng dụng tốt hơn. Ở bài viết tiếp theo, chúng ta sẽ kết hợp Java IO với Java Networking để xây dựng một Server. Hãy chuẩn bị tinh thần cho hành trình thú vị sắp tới nhé!
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào