Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Khi nào dùng readAllBytes() của InputStream trong Java 9

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ứcTrả vềHành viPhù hợp cho
read()int1 byte/lầnStreaming, low-level
read(byte[])int (bytes read)Đọc một phần, có thể < lengthBuffered read loop
readNBytes(byte[], off, len)intBlock cho đến khi đủ len byte hoặc EOFFixed-size read (header, record)
readAllBytes()byte[]Đọc HẾT stream vào memoryFile 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.