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() 控制循环,处理大文件
相关推荐
李昊哲小课1 小时前
fastapi sse websocket 奶茶店实时订单看板
人工智能·python·websocket·网络协议·fastapi·sse
格林威1 小时前
多相机微秒级对齐:硬件触发 vs PTP(IEEE 1588)方案实战对比
开发语言·人工智能·数码相机·机器学习·计算机视觉·视觉检测·机器视觉
都叫我大帅哥2 小时前
给 Java 程序员的 CSRF 攻击详解:从原理到防御实战
java
江南十四行2 小时前
Spring框架核心(上)——IoC控制反转与DI依赖注入详解
java·后端·spring
fb_123453 小时前
Linux磁盘分区从入门到实操:MBR_GPT全解析+分区工具实战指南
java·linux·gpt
初级代码游戏3 小时前
iOS开发 Swift 速记2:三种集合类型 Array Set Dictionary
开发语言·ios·swift
2401_844582953 小时前
工具包:软件架构设计的实用技巧与经验分享
python
RFID固定资产管理系统4 小时前
适配媒体行业的固定资产管理软件有哪些功能与核心优势
大数据·人工智能·python·媒体
码智社4 小时前
JSON 零基础到资深全体系教程
java·json
SunnyDays10114 小时前
Python 为 PowerPoint 添加动画:进入、退出、动作路径与文本动画(详解)
python·powerpoint·动画·动画效果·文本动画