
❤️ 个人主页: 水滴技术
🚀 支持水滴: 点赞👍 + 收藏⭐ + 留言💬
🌸 订阅专栏: Java 教程:从入门到精通
大家好,我是水滴~~
数据流与要是将 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();
}
输出的文件不能被直接查看,内容为乱码,必须使用数据输入流读取,并且读取顺序要与写入顺序一致。
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();
}
输出结果:
true
1
2
333
4444
55555
666666.6
7777777.77
水滴
系列文章
🔥 【Java I/O 流】文件的操作——java.io.File 类详解
🔥 【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
热门专栏
👍 《Java 教程:从入门到精通》
👍 《MySQL 教程:从入门到精通》
