【Java I/O 流】数据输入输出流:DataInputStream 和 DataOutputStream

简介: 数据流与要是将 Java 的基础数据类型读取或写入流中,它有如下特点:> 数据流是一个处理流,它必须套接在节点流之上。数据流在读取和写入时的顺序要一致。否则,读取的数据会失真,造成乱码。

在这里插入图片描述

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

大家好,我是水滴~~

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

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

DataOutputStream(数据输出流)

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

构造函数

DataOutputStream 只有一个构造函数。

DataOutputStream(OutputStream out)

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

常用方法

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();
}

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

DataInputStream(数据输入流)

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

构造函数

DataInputStream 只有一个构造函数。

DataInputStream(InputStream in)

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

常用方法

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();
}

输出结果:

true
1
2
333
4444
55555
666666.6
7777777.77
水滴

系列文章

🔥 【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 教程:从入门到精通

在这里插入图片描述

相关文章
|
4天前
|
Java API 开发者
Java中的文件I/O操作详解
Java中的文件I/O操作详解
|
4天前
|
存储 Java 数据库连接
Java中的数据持久化技术详解
Java中的数据持久化技术详解
|
2天前
|
Java 程序员 API
Java中的文件I/O操作详解
Java中的文件I/O操作详解
|
3天前
|
搜索推荐 算法 Java
优化Java中大数据量排序算法
优化Java中大数据量排序算法
|
3天前
|
JSON Java 数据格式
前后端数据交换,JSON基础语法和JSON数据和Java对象转换,最快的对象转换,JSON{““}字符串如何写User{id=1,username=‘zhangsan‘,password=‘123‘}
前后端数据交换,JSON基础语法和JSON数据和Java对象转换,最快的对象转换,JSON{““}字符串如何写User{id=1,username=‘zhangsan‘,password=‘123‘}
|
5天前
|
存储 缓存 Prometheus
Java中数据缓存的优化与实现策略
Java中数据缓存的优化与实现策略
|
6天前
|
Java 数据处理
Java8Stream(高效处理集合数据)
Java8Stream(高效处理集合数据)
|
6天前
|
存储 缓存 安全
解析Java中的数据缓存技术
解析Java中的数据缓存技术
|
2天前
|
监控 安全 Java
Java中的线程调度与性能优化技巧
Java中的线程调度与性能优化技巧
|
2天前
|
缓存 安全 Java
Java中的线程安全问题及解决方案
Java中的线程安全问题及解决方案