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

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

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

一、java.io

1.14 DataInput

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

以下是关于 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 的简单用法,实际场景可能需要更多的错误处理和数据验证。

相关推荐
小羊没烦恼!3 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
俊昭喜喜里3 天前
java中的继承和多态的区别
java
小羊没烦恼!3 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
譕痕3 天前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码3 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖3 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时3 天前
01-06-A-JVM排查实战详解
java·jvm
伞伞悦读3 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
vipxieliang3 天前
ValidX 在 DDD 领域驱动设计中的实践
java·spring boot
C语言小火车3 天前
C/C++ 为什么需要编译器?
开发语言·c++