码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【Java I/O 流】数据输入输出流:DataInputStream 和 DataOutputStream


    在这里插入图片描述

    ❤️ 个人主页:水滴技术
    🚀 支持水滴:点赞👍 + 收藏⭐ + 留言💬
    🌸 订阅专栏:Java 教程:从入门到精通

    文章目录

    • DataOutputStream(数据输出流)
      • 构造函数
        • DataOutputStream(OutputStream out)
      • 常用方法
      • 代码示例
    • DataInputStream(数据输入流)
      • 构造函数
        • DataInputStream(InputStream in)
      • 常用方法
      • 代码示例
    • 系列文章
    • 热门专栏


    大家好,我是水滴~~

    数据流与要是将 Java 的基础数据类型读取或写入流中,它有如下特点:

    数据流是一个处理流,它必须套接在节点流之上。
    数据流在读取和写入时的顺序要一致。否则,读取的数据会失真,造成乱码。

    DataOutputStream(数据输出流)

    数据输出流是一个处理流,它必须套接在一个节点流之上,比如:FileOutputStream、ByteArrayOutputStream 等。

    构造函数

    DataOutputStream 只有一个构造函数。

    DataOutputStream(OutputStream out)

    创建一个数据输出流的实例,入参是一个字节流,可以是 FileOutputStream、ByteArrayOutputStream 等节点流实例。

    常用方法

    DataOutputStream 继承了 FilterOutputStream ,而FilterOutputStream 又继承了 OutputStream,该数据输出流拥有常规的写入操作。

    数据输出流提供了一些额外的写入方法,用于写入 Java 基础数据类型的数据:

    方法名字节数描述
    writeBoolean(boolean v)1写入一个 boolean 类型数据
    writeByte(int v)1写入一个 byte 类型数据
    writeShort(int v)2写入一个 short 类型数据
    writeChar(int v)2写入一个 char 类型数据
    writeInt(int v)4写入一个 int 类型数据
    writeLong(long v)8写入一个 long 类型数据
    writeFloat(float v)4写入一个 float 类型数据
    writeDouble(double v)8写入一个 double 类型数据
    writeUTF(String str)/写入一个 String 类型数据,编码格式为 UTF-8

    代码示例

    该代码使用 FileOutputStream 做为节点流,往文件中输入数据。

    代码示例:

    public static void write1() throws IOException {
        // 创建一个文件输出流实例
        FileOutputStream fos = new FileOutputStream("c:/io/12_1.txt");
        // 创建一个数据输出流,并使用文件输出流作为底层流
        DataOutputStream dos = new DataOutputStream(fos);
    
        // 写入一个 boolean 型
        dos.writeBoolean(true);
        // 写入一个 byte 型
        dos.writeByte(1);
        // 写入一个 char 型
        dos.writeChar('2');
        // 写入一个 short 型
        dos.writeShort(333);
        // 写入一个 int 型
        dos.writeInt(4444);
        // 写入一个 long 型
        dos.writeLong(55555);
        // 写入一个 float 型
        dos.writeFloat(666666.6f);
        // 写入一个 double 型
        dos.writeDouble(7777777.77);
        // 写入一个 String 型,编码格式为 UTF-8
        dos.writeUTF("水滴");
    
        // 关闭流并释放资源
        dos.close();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    输出的文件不能被直接查看,内容为乱码,必须使用数据输入流读取,并且读取顺序要与写入顺序一致。

    DataInputStream(数据输入流)

    数据输入流同样是一个处理流,它也必须套接在一个节点流之上,比如:FileInputStream、ByteArrayInputStream 等。

    构造函数

    DataInputStream 只有一个构造函数。

    DataInputStream(InputStream in)

    创建一个数据输入流的实例,入参是一个字节流,可以是 FileInputStream、ByteArrayInputStream 等节点流实例。

    常用方法

    DataInputStream 继承了 FilterInputStream ,而FilterInputStream 又继承了 InputStream,该数据输出流拥有常规的写入操作。

    数据输入流提供了一些额外的读取方法,用于读取 Java 基础数据类型的数据:

    方法名字节数描述
    boolean readBoolean()1读取一个 boolean 类型数据
    byte readByte()1读取一个 byte 类型数据
    readShort()2读取一个 short 类型数据
    readChar()2读取一个 char 类型数据
    int readInt()4读取一个 int 类型数据
    long readLong()8读取一个 long 类型数据
    float readFloat()4读取一个 float 类型数据
    double readDouble()8读取一个 double 类型数据
    String readUTF()/读取一个 String 类型数据,编码格式为 UTF-8

    代码示例

    读取的数据顺序必要要与写入一致,下面代码与DataOutputStream 的代码示例顺序一致,可以正常读取。

    代码示例:

    public static void read1() throws IOException {
        // 创建一个文件输入流,做为节点流
        FileInputStream fis = new FileInputStream("c:/io/12_1.txt");
    
        // 创建一个数据输入流,做为转换流
        DataInputStream dis = new DataInputStream(fis);
        // 读取一个 boolean 型
        System.out.println(dis.readBoolean());
        // 读取一个 byte 型
        System.out.println(dis.readByte());
        // 读取一个 char 型
        System.out.println(dis.readChar());
        // 读取一个 short 型
        System.out.println(dis.readShort());
        // 读取一个 int 型
        System.out.println(dis.readInt());
        // 读取一个 long 型
        System.out.println(dis.readLong());
        // 读取一个 float 型
        System.out.println(dis.readFloat());
        // 读取一个 double 型
        System.out.println(dis.readDouble());
        // 读取一个 String 型,编码格式为 UTF-8
        System.out.println(dis.readUTF());
    
        // 关闭流并释放资源
        dis.close();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    输出结果:

    true
    1
    2
    333
    4444
    55555
    666666.6
    7777777.77
    水滴
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    系列文章

    🔥 【Java I/O 流】文件的操作——java.io.File 类详解

    🔥 【Java I/O 流】I/O 流的原理与流的分类

    🔥 【Java I/O 流】字节输入输出流:InputStream & OutputStream

    🔥 【Java I/O 流】文件字节输入输出流:FileInputStream & FileOutputStream(文件读写案例)

    🔥 【Java I/O 流】字符输入输出流:Reader 和 Writer

    🔥 【Java I/O 流】文件字符输入输出流:FileReader 和 FileWriter

    🔥 【Java I/O 流】字节缓冲流:BufferedInputStream 和 BufferedOutputStream

    🔥 【Java I/O 流】字符缓冲流:BuffreadReader 和 BufferedWriter

    🔥 【Java I/O 流】字节数组流:ByteArrayInputStream 和 ByteArrayOutputStream

    热门专栏

    👍 《IDEA 教程:从入门到精通》

    👍 《Java 教程:从入门到精通》

    👍 《MySQL 教程:从入门到精通》

    在这里插入图片描述

  • 相关阅读:
    MySQL_基本的SELECT语句
    嵌入式系统在物联网中的应用和发展
    05 图形学——图形渲染与颜色
    什么是自动化测试,一文吃透自动化测试【实战总结/建议收藏】
    Elasticsearch:LDAP 用户鉴权
    Redis三种模式——主从复制,哨兵模式,集群
    英译汉文章在线翻译器:批量翻译、素材收集、图片处理
    Android 基础知识3-4 Activity的声明周期
    Servlet入门接口、类和配置学习
    【秋招面经搬运】字节一面
  • 原文地址:https://blog.csdn.net/weixin_67276852/article/details/126145717
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号