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.
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 là InputStream và 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 là Reader và 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, ObjectInputStream và BufferedInputStream.
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 streamread(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 streamskips()
bỏ qua và giải phóng một số byte từ input streamclose()
đó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 OutputStream là FileOutputStream, ByteArrayOutputStream, ObjectOutputStream và BufferedOutputStream.
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 streamwrite(byte[] array)
ghi các byte dữ liệu từ một mảng (array) vào output streamflush()
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.