博主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
接口中一些主要的方法:
-
void readFully(byte[] b)
:- 从输入流中读取字节数组,并将其存储到指定的字节数组
b
中。
- 从输入流中读取字节数组,并将其存储到指定的字节数组
-
void readFully(byte[] b, int off, int len)
:- 从输入流中读取指定长度的字节数组,并将其存储到指定的字节数组
b
中,从数组的偏移位置off
开始。
- 从输入流中读取指定长度的字节数组,并将其存储到指定的字节数组
-
boolean readBoolean()
:- 从输入流中读取一个布尔值。
-
byte readByte()
:- 从输入流中读取一个字节。
-
int readUnsignedByte()
:- 从输入流中读取一个无符号字节,将其作为
int
返回。
- 从输入流中读取一个无符号字节,将其作为
-
short readShort()
:- 从输入流中读取一个短整数。
-
int readUnsignedShort()
:- 从输入流中读取一个无符号短整数,将其作为
int
返回。
- 从输入流中读取一个无符号短整数,将其作为
-
char readChar()
:- 从输入流中读取一个字符。
-
int readInt()
:- 从输入流中读取一个整数。
-
long readLong()
:- 从输入流中读取一个长整数。
-
float readFloat()
:- 从输入流中读取一个单精度浮点数。
-
double readDouble()
:- 从输入流中读取一个双精度浮点数。
-
String readLine()
:- 从输入流中读取一行文本。
-
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
接口通常用于从输入流中读取二进制数据,主要用于处理基本数据类型的读取。以下是一些可能的应用场景:
-
读取二进制文件: 当需要从二进制文件中读取数据时,可以使用
DataInput
接口的实现类,例如DataInputStream
。javaCopy code try (DataInputStream dataInputStream = new DataInputStream(new FileInputStream("binaryFile.dat"))) { int intValue = dataInputStream.readInt(); // 处理读取的数据 } catch (IOException e) { e.printStackTrace(); }
-
网络通信: 在网络通信中,通过
DataInput
接口的实现类读取从网络接收到的二进制数据。javaCopy code try (DataInputStream dataInputStream = new DataInputStream(socket.getInputStream())) { int intValue = dataInputStream.readInt(); // 处理从网络接收到的数据 } catch (IOException e) { e.printStackTrace(); }
-
处理二进制数据流: 当需要处理二进制数据流时,例如解析自定义协议的数据,可以使用
DataInput
接口的实现类。javaCopy code try (DataInputStream dataInputStream = new DataInputStream(inputStream)) { int header = dataInputStream.readInt(); if (header == MY_CUSTOM_PROTOCOL_HEADER) { // 处理协议中的数据 } } catch (IOException e) { e.printStackTrace(); }
-
读取存储基本数据类型的文件: 当需要读取包含基本数据类型的文件时,例如包含配置信息的二进制文件,可以使用
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
的简单用法,实际场景可能需要更多的错误处理和数据验证。