(每日持续更新)jdk api之DataInput基础、应用、实战

博主18年的互联网软件开发经验,从一名程序员小白逐步成为了一名架构师,我想通过平台将经验分享给大家,因此博主每天会在各个大牛网站点赞量超高的博客等寻找该技术栈的资料结合自己的经验,晚上进行用心精简、整理、总结、定稿,每天都会整理到12点,为了就是能让大家能够真正了解该技术栈的真正原理,最终从程序员成为一名真正的架构师,写的不一定是全站做好的,但是是全站最用心的~。

以后我会推出一些列的文章,每天都会更新,每天进步一点点,发布顺序【java的api基础、应用、实战】->【java开源技术栈及源码分析】->【java开源技术栈整合】->【java低代码开发平台的建设】

一、java.io

1.14 DataInput

DataInput 接口是 Java 中的一个接口,它定义了一组用于从二进制数据输入流中读取基本数据类型的方法。DataInput 接口是 ObjectInputObjectInputValidation 接口的父接口,提供了一系列用于读取不同类型数据的方法。

以下是关于 DataInput 接口的主要信息:

DataInput 接口介绍:
  • 包路径: java.io
DataInput 接口所有字段:

DataInput 接口没有定义任何字段。

DataInput 接口构造方法:

DataInput 接口是一个接口,没有构造方法,因为它是由实现它的类来提供实现的。

DataInput 接口方法摘要:

以下是 DataInput 接口中一些主要的方法:

  1. void readFully(byte[] b)

    • 从输入流中读取字节数组,并将其存储到指定的字节数组 b 中。
  2. void readFully(byte[] b, int off, int len)

    • 从输入流中读取指定长度的字节数组,并将其存储到指定的字节数组 b 中,从数组的偏移位置 off 开始。
  3. boolean readBoolean()

    • 从输入流中读取一个布尔值。
  4. byte readByte()

    • 从输入流中读取一个字节。
  5. int readUnsignedByte()

    • 从输入流中读取一个无符号字节,将其作为 int 返回。
  6. short readShort()

    • 从输入流中读取一个短整数。
  7. int readUnsignedShort()

    • 从输入流中读取一个无符号短整数,将其作为 int 返回。
  8. char readChar()

    • 从输入流中读取一个字符。
  9. int readInt()

    • 从输入流中读取一个整数。
  10. long readLong()

    • 从输入流中读取一个长整数。
  11. float readFloat()

    • 从输入流中读取一个单精度浮点数。
  12. double readDouble()

    • 从输入流中读取一个双精度浮点数。
  13. String readLine()

    • 从输入流中读取一行文本。
  14. String readUTF()

    • 从输入流中读取以修饰符长度前缀编码的字符串。
简单使用例子:

以下是一个简单的例子,演示了如何使用 DataInput 接口的一些方法从二进制输入流中读取基本数据类型。

复制代码
javaCopy code
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
​
public class DataInputExample {
​
    public static void main(String[] args) {
        try (DataInputStream dataInputStream = new DataInputStream(new FileInputStream("data.dat"))) {
            // 从输入流中读取不同类型的数据
            boolean boolValue = dataInputStream.readBoolean();
            byte byteValue = dataInputStream.readByte();
            short shortValue = dataInputStream.readShort();
            int intValue = dataInputStream.readInt();
            long longValue = dataInputStream.readLong();
            float floatValue = dataInputStream.readFloat();
            double doubleValue = dataInputStream.readDouble();
            String stringValue = dataInputStream.readUTF();
​
            // 打印读取的数据
            System.out.println("Boolean: " + boolValue);
            System.out.println("Byte: " + byteValue);
            System.out.println("Short: " + shortValue);
            System.out.println("Int: " + intValue);
            System.out.println("Long: " + longValue);
            System.out.println("Float: " + floatValue);
            System.out.println("Double: " + doubleValue);
            System.out.println("String: " + stringValue);
​
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在这个例子中,我们使用 DataInputStream 包装一个 FileInputStream,然后通过 DataInput 接口的方法逐个读取不同类型的数据。这个例子假设存在一个名为 "data.dat" 的二进制数据文件。

应用场景

DataInput 接口通常用于从输入流中读取二进制数据,主要用于处理基本数据类型的读取。以下是一些可能的应用场景:

  1. 读取二进制文件: 当需要从二进制文件中读取数据时,可以使用 DataInput 接口的实现类,例如 DataInputStream

    复制代码
    javaCopy code
    try (DataInputStream dataInputStream = new DataInputStream(new FileInputStream("binaryFile.dat"))) {
        int intValue = dataInputStream.readInt();
        // 处理读取的数据
    } catch (IOException e) {
        e.printStackTrace();
    }
  2. 网络通信: 在网络通信中,通过 DataInput 接口的实现类读取从网络接收到的二进制数据。

    复制代码
    javaCopy code
    try (DataInputStream dataInputStream = new DataInputStream(socket.getInputStream())) {
        int intValue = dataInputStream.readInt();
        // 处理从网络接收到的数据
    } catch (IOException e) {
        e.printStackTrace();
    }
  3. 处理二进制数据流: 当需要处理二进制数据流时,例如解析自定义协议的数据,可以使用 DataInput 接口的实现类。

    复制代码
    javaCopy code
    try (DataInputStream dataInputStream = new DataInputStream(inputStream)) {
        int header = dataInputStream.readInt();
        if (header == MY_CUSTOM_PROTOCOL_HEADER) {
            // 处理协议中的数据
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
  4. 读取存储基本数据类型的文件: 当需要读取包含基本数据类型的文件时,例如包含配置信息的二进制文件,可以使用 DataInput 接口的实现类。

    复制代码
    javaCopy code
    try (DataInputStream dataInputStream = new DataInputStream(new FileInputStream("config.dat"))) {
        int intValue = dataInputStream.readInt();
        // 处理读取的配置数据
    } catch (IOException e) {
        e.printStackTrace();
    }

这些场景中,DataInput 接口的实现类通常与 DataOutput 接口的实现类(例如 DataOutputStream)配合使用,以便实现对二进制数据的读写操作。这种方式能够更方便地处理二进制数据,尤其是包含基本数据类型的数据。

实战

在实际项目中,DataInput 接口的实现类通常用于读取自定义的二进制数据格式。下面是一个简化的例子,演示了如何使用 DataInput 接口的实现类 DataInputStream 从二进制文件中读取自定义数据结构的信息。假设有一个名为 "person_data.dat" 的二进制文件,其中存储了多个人员的姓名和年龄信息。

复制代码
javaCopy code
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
​
public class BinaryDataReader {
​
    public static void main(String[] args) {
        try (DataInputStream dataInputStream = new DataInputStream(new FileInputStream("person_data.dat"))) {
            // 读取每个人员的信息
            while (dataInputStream.available() > 0) {
                String name = dataInputStream.readUTF();
                int age = dataInputStream.readInt();
​
                // 处理读取的人员信息
                System.out.println("Name: " + name + ", Age: " + age);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在这个例子中,假设 "person_data.dat" 文件的格式是按照每个人员的姓名(UTF-8 编码的字符串)和年龄(整数)交替存储的。通过使用 DataInputStream,我们可以轻松地读取每个人员的信息。

请注意,在实际项目中,可能会使用更复杂的数据结构和自定义协议,需要根据实际情况来解析和处理二进制数据。此例子仅为演示 DataInput 的简单用法,实际场景可能需要更多的错误处理和数据验证。

相关推荐
FuLLovers28 分钟前
2024-09-13 冯诺依曼体系结构 OS管理 进程
linux·开发语言
IT毕设梦工厂1 小时前
计算机毕业设计选题推荐-在线拍卖系统-Java/Python项目实战
java·spring boot·python·django·毕业设计·源码·课程设计
everyStudy1 小时前
JS中判断字符串中是否包含指定字符
开发语言·前端·javascript
luthane1 小时前
python 实现average mean平均数算法
开发语言·python·算法
Ylucius2 小时前
动态语言? 静态语言? ------区别何在?java,js,c,c++,python分给是静态or动态语言?
java·c语言·javascript·c++·python·学习
凡人的AI工具箱2 小时前
AI教你学Python 第11天 : 局部变量与全局变量
开发语言·人工智能·后端·python
sleP4o2 小时前
Python操作MySQL
开发语言·python·mysql
是店小二呀2 小时前
【C++】C++ STL探索:Priority Queue与仿函数的深入解析
开发语言·c++·后端
七夜zippoe2 小时前
分布式系统实战经验
java·分布式
洛寒瑜2 小时前
【读书笔记-《30天自制操作系统》-23】Day24
开发语言·汇编·笔记·操作系统·应用程序