Download as pdf or txt
Download as pdf or txt
You are on page 1of 8

09:28 04/04/2024 TÌM HIỂU IO STREAM TRONG JAVA

TÌM HIỂU IO STREAM TRONG JAVA


22520266@gm.uit.edu.vn Switch account
Draft saved
Not shared

* Indicates required question

Nhóm *

19

Thành viên có mặt (họ tên - mssv) *

Hà Minh Đức-22520266,
Trần Thành Đạt-22520237,
Trần Tiến Đạt-22520239

Câu 1. Stream trong Java là gì? *

Stream trong Java là một chuỗi các phần tử dữ liệu được xử lý tuần tự. Nó cung cấp một
cách thuận tiện để thực hiện các hoạt động xử lý dữ liệu trên tập hợp các phần tử, chẳng
hạn như bộ lọc, ánh xạ (mapping), sắp xếp, giảm kích thước (reducing) và nhiều hoạt động
khác mà không cần phải thực hiện vòng lặp rõ ràng.

Câu 2. Theo định dạng thì có 2 loại stream là gì? *

Theo định dạng, có hai loại Stream trong Java: Byte Stream, Character Stream

https://docs.google.com/forms/d/e/1FAIpQLSe2ov1xEB1IvWh5WxasDRhGWWwAvUsjd-eVZZPm06C186oY7Q/viewform 1/8
09:28 04/04/2024 TÌM HIỂU IO STREAM TRONG JAVA

Câu 3. Theo thao tác thì có 2 loại stream là gì? *

Theo thao tác, có hai loại Stream trong Java:

Intermediate Stream Operations (Các thao tác trung gian): Đây là các phương thức được gọi
trên một Stream để thực hiện các thao tác trung gian, như lọc (filter), ánh xạ (map), giới hạn
(limit), sắp xếp (sorted), loại bỏ phần tử trùng lặp (distinct), và nhiều thao tác khác. Các thao
tác trung gian thường trả về một Stream mới, cho phép chúng ta kết hợp và thực hiện các
thao tác khác nhau trên dữ liệu.

Terminal Stream Operations (Các thao tác kết thúc): Đây là các phương thức được gọi để
kết thúc một chuỗi thao tác trên Stream và thực hiện các hành động cuối cùng trên dữ liệu,
chẳng hạn như thu thập (collect), duyệt (forEach), đếm (count), tìm kiếm (findAny, findFirst),
tìm giá trị lớn nhất, nhỏ nhất (max, min), hoặc tính toán giá trị tổng hợp (sum, average). Một
khi một thao tác kết thúc được gọi, Stream sẽ không còn sử dụng được nữa.

Câu 4. Khác nhau giữa byte stream và character stream là gì? *

Byte stream và character stream là hai loại stream trong Java được sử dụng để đọc và ghi
dữ liệu, nhưng chúng có một số điểm khác nhau:

Byte Stream (Luồng byte):

Byte stream thao tác với dữ liệu dưới dạng byte, được sử dụng để đọc và ghi dữ liệu nhị
phân, chẳng hạn như file hình ảnh, file âm thanh, hoặc file nhị phân khác.
Byte stream trong Java là trừu tượng của các lớp InputStream và OutputStream.
Ví dụ: FileInputStream, FileOutputStream, ByteArrayInputStream, ByteArrayOutputStream.

Character Stream (Luồng ký tự):

Character stream thao tác với dữ liệu dưới dạng ký tự, được sử dụng để đọc và ghi dữ liệu
văn bản, chẳng hạn như file văn bản hoặc các loại dữ liệu văn bản khác.
Character stream trong Java là trừu tượng của các lớp Reader và Writer.
Character stream thường được sử dụng để đọc và ghi các file văn bản để tránh các vấn đề
liên quan đến mã hóa (encoding) và bộ nhớ đệm (buffering).
Ví dụ: FileReader, FileWriter, BufferedReader, BufferedWriter.

https://docs.google.com/forms/d/e/1FAIpQLSe2ov1xEB1IvWh5WxasDRhGWWwAvUsjd-eVZZPm06C186oY7Q/viewform 2/8
09:28 04/04/2024 TÌM HIỂU IO STREAM TRONG JAVA

Câu 5. Những lớp này thuộc byte stream? *

Các lớp sau thuộc loại byte stream trong Java:


InputStream: Lớp cơ sở cho tất cả các lớp byte input stream. Nó cung cấp các phương thức
trừu tượng để đọc dữ liệu byte.
FileInputStream: Lớp này được sử dụng để đọc dữ liệu từ một file nhị phân trên hệ thống
tệp.
ByteArrayInputStream: Lớp này cho phép đọc dữ liệu từ một mảng byte trong bộ nhớ.
PipedInputStream: Lớp này được sử dụng để đọc dữ liệu từ một luồng kết nối (pipe).
FilterInputStream: Lớp này là lớp trừu tượng cơ sở cho các lớp input stream khác, cung cấp
tính năng mở rộng cho các input stream.
DataInputStream: Lớp này cung cấp các phương thức để đọc các dữ liệu nguyên thủy từ một
input stream.
ObjectInputStream: Lớp này được sử dụng để đọc các đối tượng đã được ghi ra một output
stream trước đó.

Câu 6. Những lớp này thuộc character stream? *

Các lớp sau thuộc loại character stream trong Java:

Reader: Lớp cơ sở cho tất cả các lớp character input stream. Nó cung cấp các phương thức
trừu tượng để đọc dữ liệu dưới dạng ký tự.

FileReader: Lớp này được sử dụng để đọc dữ liệu từ một file văn bản trên hệ thống tệp.

CharArrayReader: Lớp này cho phép đọc dữ liệu từ một mảng ký tự trong bộ nhớ.

StringReader: Lớp này cho phép đọc dữ liệu từ một chuỗi ký tự.

PipedReader: Lớp này được sử dụng để đọc dữ liệu từ một luồng kết nối (pipe).

BufferedReader: Lớp này cung cấp các phương thức bổ sung để đọc dữ liệu văn bản từ một
lớp Reader khác một cách hiệu quả hơn.

FilterReader: Lớp này là lớp trừu tượng cơ sở cho các lớp input stream ký tự khác, cung cấp
tính năng mở rộng cho các character stream.

InputStreamReader: Lớp này cho phép đọc dữ liệu ký tự từ một input stream byte bằng cách
chuyển đổi các byte sang các ký tự sử dụng một bộ mã (encoding) cụ thể.

https://docs.google.com/forms/d/e/1FAIpQLSe2ov1xEB1IvWh5WxasDRhGWWwAvUsjd-eVZZPm06C186oY7Q/viewform 3/8
09:28 04/04/2024 TÌM HIỂU IO STREAM TRONG JAVA

Câu 7. Serialization là gì? ObjectOutputStream và ObjectInputStream dùng để *


làm gì? Cho ví dụ?

https://docs.google.com/forms/d/e/1FAIpQLSe2ov1xEB1IvWh5WxasDRhGWWwAvUsjd-eVZZPm06C186oY7Q/viewform 4/8
09:28 04/04/2024 TÌM HIỂU IO STREAM TRONG JAVA

Serialization là quá trình chuyển đổi một đối tượng Java thành dữ liệu byte để có thể được
lưu trữ trên bộ nhớ hoặc truyền đi qua mạng hoặc giữa các quá trình (process). Quá trình
ngược lại, khi dữ liệu byte được chuyển đổi thành đối tượng Java, được gọi là
deserialization.

Trong Java, để thực hiện serialization và deserialization, chúng ta sử dụng các lớp
ObjectOutputStream và ObjectInputStream.

ObjectOutputStream: Lớp này được sử dụng để ghi (serialize) các đối tượng Java thành dữ
liệu byte. Nó cung cấp các phương thức để ghi các đối tượng vào một OutputStream, như là
một file hoặc một luồng (stream).

ObjectInputStream: Lớp này được sử dụng để đọc (deserialize) dữ liệu byte và chuyển đổi
chúng thành các đối tượng Java. Nó cung cấp các phương thức để đọc các đối tượng từ
một InputStream, như là một file hoặc một luồng.

Ví dụ:
import java.io.*;
class Student implements Serializable {
private String name;
private int id;

public Student(String name, int id) {


this.name = name;
this.id = id;
}

public String getName() {


return name;
}

public int getId() {


return id;
}
}

public class Main {


public static void main(String[] args) throws IOException, ClassNotFoundException {

Student student = new Student("John", 123);

// Serialization: Ghi đối tượng vào một file


ObjectOutputStream out = new ObjectOutputStream(new
FileOutputStream("student.ser"));
out.writeObject(student);
out.close();

// Deserialization: Đọc đối tượng từ file


ObjectInputStream in new ObjectInputStream(new FileInputStream("student ser"));
https://docs.google.com/forms/d/e/1FAIpQLSe2ov1xEB1IvWh5WxasDRhGWWwAvUsjd-eVZZPm06C186oY7Q/viewform 5/8
09:28 04/04/2024 TÌM HIỂU IO STREAM TRONG JAVA
ObjectInputStream in = new ObjectInputStream(new FileInputStream( student.ser ));
Student deserializedStudent = (Student) in.readObject();
in.close();

// In ra thông tin của đối tượng được deserialized


System.out.println("Name: " + deserializedStudent.getName());
System.out.println("ID: " + deserializedStudent.getId());
}
}

Câu 8. BufferedInputStream, BufferedOutputStream dùng để làm gì? *

BufferedInputStream và BufferedOutputStream là hai lớp trong Java được sử dụng để tăng


hiệu suất khi đọc và ghi dữ liệu từ và đến các luồng (streams), như luồng đọc từ tệp hoặc
luồng ghi vào tệp.

BufferedInputStream:

BufferedInputStream được sử dụng để đọc dữ liệu từ một luồng đầu vào (input stream) với
việc sử dụng một bộ đệm (buffer). Bằng cách này, nó giúp giảm số lần truy cập đến nguồn
dữ liệu gốc (như tệp hoặc luồng mạng) bằng cách đọc dữ liệu vào bộ đệm trước, sau đó trả
về từ bộ đệm khi cần thiết.
Việc sử dụng BufferedInputStream có thể cải thiện hiệu suất đọc dữ liệu, đặc biệt là khi đọc
dữ liệu từ các nguồn có thời gian truy cập chậm như tệp hoặc mạng.
BufferedOutputStream:

BufferedOutputStream được sử dụng để ghi dữ liệu từ một luồng đầu ra (output stream) với
việc sử dụng một bộ đệm. Thay vì ghi dữ liệu trực tiếp từ ứng dụng vào nguồn dữ liệu gốc,
dữ liệu được ghi vào bộ đệm trước, và sau đó được ghi từ bộ đệm vào nguồn dữ liệu gốc khi
bộ đệm đã đầy hoặc khi cần thiết.
Việc sử dụng BufferedOutputStream giúp cải thiện hiệu suất ghi dữ liệu, đặc biệt là khi ghi
dữ liệu vào các nguồn có thời gian truy cập chậm hoặc khi thực hiện ghi dữ liệu theo cụm
(batch) thay vì ghi từng byte một.

https://docs.google.com/forms/d/e/1FAIpQLSe2ov1xEB1IvWh5WxasDRhGWWwAvUsjd-eVZZPm06C186oY7Q/viewform 6/8
09:28 04/04/2024 TÌM HIỂU IO STREAM TRONG JAVA

Câu 9. DataOutputStream , DataInputStream dùng để làm gì? *

DataOutputStream và DataInputStream là hai lớp trong Java được sử dụng để thực hiện ghi
và đọc dữ liệu theo các kiểu dữ liệu nguyên thủy và chuỗi Unicode, không phụ thuộc vào cấu
trúc của hệ điều hành hoặc cấu trúc dữ liệu. Cụ thể:

DataOutputStream:

DataOutputStream là một lớp được sử dụng để ghi dữ liệu vào một luồng đầu ra (output
stream). Nó cung cấp các phương thức để ghi các kiểu dữ liệu nguyên thủy như int, double,
boolean, và các chuỗi Unicode vào luồng đầu ra.
Khi ghi dữ liệu bằng DataOutputStream, dữ liệu được ghi dưới dạng nhị phân theo các định
dạng chuẩn, không phụ thuộc vào nền tảng hoặc kiến trúc của hệ thống.

DataInputStream:

DataInputStream là một lớp được sử dụng để đọc dữ liệu từ một luồng đầu vào (input
stream). Nó cung cấp các phương thức để đọc các kiểu dữ liệu nguyên thủy và chuỗi
Unicode từ luồng đầu vào, mà đã được ghi bằng cùng một định dạng nhị phân bởi
DataOutputStream.
Khi đọc dữ liệu bằng DataInputStream, dữ liệu được đọc và chuyển đổi từ dạng nhị phân
sang các kiểu dữ liệu tương ứng.

Câu 10. Hai lớp cao nhất trong tổ chức luồng stream trong Java là gì? *

Trong Java, hai lớp cao nhất trong tổ chức luồng (stream) là InputStream và OutputStream.
Đây là hai lớp trừu tượng (abstract classes) trong gói java.io, và chúng định nghĩa giao diện
cơ bản cho việc đọc và ghi dữ liệu từ và đến một nguồn hoặc đích dữ liệu.

Submit Clear form

Never submit passwords through Google Forms.

This form was created inside of Trường Đại Học Công Nghệ Thông Tin. Report Abuse

Forms

https://docs.google.com/forms/d/e/1FAIpQLSe2ov1xEB1IvWh5WxasDRhGWWwAvUsjd-eVZZPm06C186oY7Q/viewform 7/8
09:28 04/04/2024 TÌM HIỂU IO STREAM TRONG JAVA

https://docs.google.com/forms/d/e/1FAIpQLSe2ov1xEB1IvWh5WxasDRhGWWwAvUsjd-eVZZPm06C186oY7Q/viewform 8/8

You might also like