402. Java 文件操作基础 - 读取二进制文件

文章目录

  • [402. Java 文件操作基础 - 读取二进制文件](#402. Java 文件操作基础 - 读取二进制文件)
    • [1️⃣ 背景说明](#1️⃣ 背景说明)
    • [2️⃣ 读取二进制文件示例](#2️⃣ 读取二进制文件示例)
      • [🔹 说明](#🔹 说明)
    • [3️⃣ 转换为字符流读取(可选)](#3️⃣ 转换为字符流读取(可选))
    • [4️⃣ 总结](#4️⃣ 总结)

402. Java 文件操作基础 - 读取二进制文件

1️⃣ 背景说明

  • 二进制文件(Binary File)与文本文件不同,它存储的数据不是可读字符,而是原始字节。
  • 读取二进制文件时,使用 InputStream ,写入二进制文件时使用 OutputStream
  • 对二进制文件,不能用 readLine() 直接读取(它是字符流方法)。如果想逐行读取,可以将字节转换为字符(需知道编码)。

2️⃣ 读取二进制文件示例

java 复制代码
import java.nio.file.*;
import java.io.*;

public class BinaryFileReadExample {

    public static void main(String[] args) {
        Path file = Paths.get("example.bin"); // 二进制文件路径

        // try-with-resources 自动关闭流
        try (InputStream in = Files.newInputStream(file)) {

            // 将输入流包装成 BufferedInputStream 提高效率
            BufferedInputStream bis = new BufferedInputStream(in);

            byte[] buffer = new byte[1024]; // 每次读取 1024 字节
            int bytesRead;

            while ((bytesRead = bis.read(buffer)) != -1) {
                // bytesRead 表示本次实际读取的字节数
                for (int i = 0; i < bytesRead; i++) {
                    System.out.printf("%02X ", buffer[i]); // 以十六进制打印
                }
                System.out.println();
            }

        } catch (IOException x) {
            System.err.println("读取文件异常: " + x);
        }
    }
}

🔹 说明

  1. Files.newInputStream(file) 返回一个 未缓冲的 InputStream
  2. 使用 BufferedInputStream 可以提高读取效率,减少 I/O 调用次数。
  3. 每次读取固定大小的字节数组(buffer),直到返回 -1 表示文件结束。
  4. 可将字节数组打印、保存或进行其他二进制处理。

3️⃣ 转换为字符流读取(可选)

如果二进制文件是文本数据,想按行读取,可像这样:

java 复制代码
try (InputStream in = Files.newInputStream(file);
     BufferedReader reader = new BufferedReader(new InputStreamReader(in, "UTF-8"))) {

    String line;
    while ((line = reader.readLine()) != null) {
        System.out.println(line);
    }

} catch (IOException x) {
    System.err.println("读取文本文件异常: " + x);
}
  • InputStreamReader 将字节流转换为字符流,指定编码(如 UTF-8)。
  • BufferedReader 提供 readLine() 方法,可按行读取文本数据。

4️⃣ 总结

  • InputStream vs Reader
    • InputStream:读取原始字节 → 二进制文件
    • Reader:读取字符 → 文本文件
  • 缓冲流 BufferedInputStream / BufferedReader 提高效率
  • try-with-resources 自动关闭流,防止资源泄漏
  • 循环读取 :用 read(buffer)readLine() 控制循环,处理大文件
相关推荐
兰令水14 分钟前
hot100【acm版】【2026.7.14打卡-java版本】
java·数据结构·算法·leetcode·面试
thefool1122661 小时前
Java 数组是引用类型
java
geovindu1 小时前
CSharp: Bridge Pattern
开发语言·后端·桥接模式·结构型模式
এ慕ོ冬℘゜1 小时前
深入 JavaScript BOM:掌握 window 对象的窗口控制魔法
开发语言·javascript·ecmascript
2501_941982052 小时前
企业微信二次开发:如何用 Python 搭建通用的 Webhook 实时消息接收
开发语言·python·企业微信
在世修行2 小时前
第24篇:PyInstaller打包实战 — 从Python脚本到Windows EXE
人工智能·python·pyinstaller
cfm_29142 小时前
Spring监听器
java·spring boot·后端
逝水无殇2 小时前
C# 特性详解
开发语言·后端·c#
华研前沿标杆游学2 小时前
2026年制造企业标杆参访实操指南:3步选对适配参访路线
python
SamDeepThinking2 小时前
Java面向对象在JVM里怎么实现
java·后端·面试