Java 9 thêm readAllBytes() vào InputStream: đọc tất cả byte vào byte array một lần. Block cho đến khi đọc hết byte còn lại, EOF, hoặc exception. Không tự close InputStream. Khi đã EOF, gọi lại trả về empty byte array. Dùng cho case đơn giản: đọc toàn bộ stream vào byte array – KHÔNG dành cho stream dữ liệu lớn.
Cú pháp
public byte[] readAllBytes() throws IOException
Ví dụ: Đọc file Technology.txt thành String
import java.nio.*;
import java.nio.file.*;
import java.io.*;
import java.util.stream.*;
import java.nio.charset.StandardCharsets;
public class ReadAllBytesMethodTest {
public static void main(String args[]) {
try (InputStream stream = Files.newInputStream(Paths.get("C://Temp//Technology.txt"))) {
// Convert stream to string
String contents = new String(stream.readAllBytes(), StandardCharsets.UTF_8);
// Print content
System.out.println(contents);
} catch(IOException ioe) {
ioe.printStackTrace();
}
}
}
Kết quả
"JAVA", "PYTHON", "JAVASCRIPT", "SELENIUM", "SCALA"
readAllBytes() vs readNBytes() vs read()
| Phương thức | Trả về | Hành vi | Phù hợp cho |
|---|---|---|---|
read() | int | 1 byte/lần | Streaming, low-level |
read(byte[]) | int (bytes read) | Đọc một phần, có thể < length | Buffered read loop |
readNBytes(byte[], off, len) | int | Block cho đến khi đủ len byte hoặc EOF | Fixed-size read (header, record) |
readAllBytes() | byte[] | Đọc HẾT stream vào memory | File nhỏ, config, test data |
⚠️ Cảnh báo
- Không dùng cho file lớn – load toàn bộ vào heap → OOM.
- Không tự close stream – phải dùng try-with-resources.
- Sau EOF, gọi lại trả về
new byte[0](empty array).
Best practice
// Đúng: try-with-resources, file nhỏ
try (InputStream is = Files.newInputStream(path)) {
byte[] data = is.readAllBytes();
// process data
}
// Sai: File lớn, không close
byte[] huge = new FileInputStream("huge.log").readAllBytes(); // OOM risk!
readAllBytes() tiện lợi cho file nhỏ, config, test – nhưng nguy hiểm với big data.