讲师中心 微信公众号
AI工具推荐 视频效率加速

Java中如何读写二进制文件 详解DataInputStream的使用

星涛大大_2630

星涛大大_2630

发布时间:2025-06-18 17:42:02

|

902人浏览过

|

来源于php中文网

原创

java中读写二进制文件应使用datainputstream和dataoutputstream,因为它们支持直接读写基本数据类型。1. 创建fileinputstream或fileoutputstream作为底层流;2. 用datainputstream/dataoutputstream包装文件流;3. 使用readint、writeint等方法操作数据;4. 最后务必关闭流释放资源。这两个类能自动处理字节与基本类型的转换,避免手动处理字节序的复杂性。使用时必须确保读写顺序与类型一致,否则会引发错误或异常。对于字符串需注意编码问题,大数据量建议配合bufferedinputstream提升性能。异常处理方面,ioexception表示读写错误,eofexception用于检测文件末尾,应在try-catch中捕获并用finally关闭流。datainputstream适用于结构已知的基本类型数据,而objectinputstream则用于对象的序列化与反序列化,但存在安全风险,通常推荐更安全的格式如json替代。

Java中如何读写二进制文件 详解DataInputStream的使用

Java中读写二进制文件,核心在于使用DataInputStream和DataOutputStream这两个类。它们允许你直接读写Java的基本数据类型,例如int、float、double等,而不需要手动进行类型转换。

Java中如何读写二进制文件 详解DataInputStream的使用

解决方案

Java中如何读写二进制文件 详解DataInputStream的使用

要读写二进制文件,你需要以下步骤:

立即学习“Java免费学习笔记(深入)”;

Java中如何读写二进制文件 详解DataInputStream的使用
  1. 创建文件输入/输出流: 使用FileInputStream或FileOutputStream创建文件流。
  2. 创建数据输入/输出流: 使用DataInputStream或DataOutputStream包裹文件流。
  3. 使用数据流读写数据: 使用readInt(), readFloat(), writeInt(), writeFloat()等方法读写基本数据类型。
  4. 关闭流: 务必关闭流,释放资源。

以下是一个简单的示例,展示如何将一些整数写入二进制文件,然后再读取出来:

import java.io.*;

public class BinaryFileRW {

    public static void main(String[] args) {
        String filename = "data.bin";

        // 写入二进制数据
        try (DataOutputStream dos = new DataOutputStream(new FileOutputStream(filename))) {
            dos.writeInt(123);
            dos.writeInt(456);
            dos.writeInt(789);
            System.out.println("Data written to file.");
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 读取二进制数据
        try (DataInputStream dis = new DataInputStream(new FileInputStream(filename))) {
            int num1 = dis.readInt();
            int num2 = dis.readInt();
            int num3 = dis.readInt();

            System.out.println("Read data: " + num1 + ", " + num2 + ", " + num3);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

DataInputStream实际上是对InputStream的一个装饰器,它增加了读取Java基本数据类型的功能。如果没有DataInputStream,你需要自己处理字节的转换,这会非常繁琐。

JavaStoryDevelop
JavaStoryDevelop

你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在

下载

为什么需要使用DataInputStream/DataOutputStream而不是简单的InputStream/OutputStream?

直接使用InputStream和OutputStream只能读写字节流,你需要手动处理数据类型的转换,比如将int转换为4个字节,或者将4个字节转换为int。DataInputStream和DataOutputStream简化了这个过程,它们提供了直接读写Java基本数据类型的方法,减少了出错的可能性,并且代码更加简洁易懂。 想象一下,如果没有这些类,你每次都要手动处理字节序的问题,想想都头大。

DataInputStream在处理不同数据类型时有哪些需要注意的地方?

在使用DataInputStream时,务必确保写入和读取的数据类型顺序和类型一致。例如,如果你先写入一个int,然后写入一个float,那么读取时也必须按照这个顺序读取。否则,你会得到意想不到的结果,甚至抛出异常。此外,要注意文件编码问题,虽然DataInputStream主要处理二进制数据,但在涉及字符串时,需要考虑字符编码。 另外,处理大数据时,可能需要考虑缓冲流BufferedInputStream来提高性能。

如何处理二进制文件中的异常和错误?

读写二进制文件时,可能会遇到多种异常,例如IOException、EOFException等。IOException通常表示文件读写过程中发生了错误,例如文件不存在、权限不足等。EOFException表示已经到达文件末尾,但仍然尝试读取数据。处理这些异常的关键在于使用try-catch块,并在finally块中关闭流,确保资源得到释放。 例如:

try (DataInputStream dis = new DataInputStream(new FileInputStream(filename))) {
    while (true) {
        try {
            int num = dis.readInt();
            System.out.println("Read: " + num);
        } catch (EOFException e) {
            System.out.println("End of file reached.");
            break;
        }
    }
} catch (IOException e) {
    e.printStackTrace();
}

这段代码展示了如何使用循环读取整数,直到文件末尾。EOFException被用来判断是否到达文件末尾,并安全地退出循环。

DataInputStream和ObjectInputStream的区别是什么?什么时候应该使用哪个?

DataInputStream用于读写Java的基本数据类型和字符串。它假定你知道文件中数据的结构,并且按照正确的顺序读取。 ObjectInputStream用于读取Java对象。它能够将对象从字节流中反序列化出来,恢复对象的状态。

选择哪个取决于你的需求。如果你只是想读写基本数据类型,那么DataInputStream更简单高效。如果你需要读写复杂的对象,那么ObjectInputStream是更好的选择。但是,使用ObjectInputStream需要注意安全问题,因为它可能存在反序列化漏洞。 实际上,很多时候,我们可能会避免使用ObjectInputStream,而选择使用JSON或其他更安全的数据格式来序列化对象。

热门AI工具

更多
咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2135

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

3282

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

1096

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

3759

2025.09.10

数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2971

2023.10.31

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

554

2025.10.31

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

502

2026.02.12

css中float用法
css中float用法

css中float属性允许元素脱离文档流并沿其父元素边缘排列,用于创建并排列、对齐文本图像、浮动菜单边栏和重叠元素。想了解更多float的相关内容,可以阅读本专题下面的文章。

6607

2024.04.28

Playwright 测试失败怎么办
Playwright 测试失败怎么办

Playwright测试失败专题汇集超时、定位器匹配、浏览器提前关闭、依赖与插件配置、文件上传、SSL及Docker启动等故障文章,并介绍通过截图、报告和Trace定位错误。

0

2026.10.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn