使用 fileinputstream 读取文件时,应通过调用其 read() 方法从底层输入流中获取原始字节数据。具体做法是创建一个指向目标文件的 fileinputstream 实例,并在循环中持续调用 read(byte[] buffer) 将数据读入缓冲区,直到返回值等于 -1 表示文件结束。由于该方法直接处理二进制字节,不会进行任何字符编码转换,因此适合读取非文本文件或需要精确控制字节序列的场景。

如何高效地批量读取文件内容
为了提升读取效率并减少系统调用次数,应当优先使用带缓冲区的重载方法 read(byte[] b) 而非无参的 read()。该方法的参数是一个字节数组,每次调用会尽可能多地填充该数组并返回实际读取的字节数。开发者只需分配一个合适大小的缓冲区(如 8KB 或 4KB),在循环中反复调用此方法即可实现高效的数据传输,避免了逐字节读取带来的巨大性能开销。

import java.io.FileInputStream;
import java.io.IOException;
public class ByteStreamExample {
public static void main(String[] args) {
try (FileInputStream fis = new FileInputStream("data.bin")) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = fis.read(buffer)) != -1) {
// 处理 buffer 中的前 bytesRead 个字节
System.out.println("Read " + bytesRead + " bytes.");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
读取完成后资源释放的正确方式
在使用完 FileInputStream 后,必须确保底层的文件描述符被正确关闭,以防止资源泄露。最推荐的做法是使用 Java 7 引入的 try-with-resources 语句,将流对象声明在括号内,这样即使发生异常,JVM 也会自动调用 close() 方法。如果未使用此语法,则必须在 finally 块中显式检查流是否为空并调用 close(),否则可能导致文件句柄耗尽或内存泄漏问题。

import java.io.FileInputStream;
import java.io.IOException;
public class ResourceManagement {
public static void main(String[] args) {
// 使用 try-with-resources 自动管理资源
try (FileInputStream fis = new FileInputStream("config.txt")) {
int data = fis.read();
if (data != -1) {
System.out.println("First byte: " + data);
}
} catch (IOException e) {
System.err.println("Error reading file: " + e.getMessage());
}
}
}
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











