Java 输入与输出(I\O)之数据流【DataInputStream】【DataOutputStream】详解

DataInputStream和DataOutputStream是 Java的数据流,数据流是一个装饰流(处理流)。数据流在读取和写入时的顺序要一致。否则,读取的数据必定是错误的,会造成乱码。

数据流DataInputStream和DataOutputStream扩展了基本输入输出流读取基本数据类型和String类型数据的功能。数据流能以一种与平台无关的方式,直接从字节输入读取或向字节输出流写出Java基本类型和String类型的数据,常用于网络传输。
注意事项:
网络传输数据时要注意BOM【字节序标记】
什么是BOM(Byte Order Mark)【字节序标记】【大端BE】【小端LE】

在网络传输数据时,BOM【字节序标记】定义了数据传输的字节顺序:
DataInputStream 会根据当前平台的字节顺序来读取数据。通常,Java 使用的是BOM是大端BE(big-endian),但也有一些平台使用是小端LE(Little endian)小端字节顺序。可以使用 DataInputStream 的 readXXX() 方法来测试,以确保读取数据时使用正确的字节顺序。

数据输出流DataOutputStream
DataOutputStream继承自FilterOutputStream,而 FilterOutputStream 又继承了 OutputStream。数据输出流拥有基本数据类型的写入操作。其writeUTF(String text)方法可将字符串写入数据输出流。但它不能直接连接数据源,它只能用于装饰节点流。

DataOutputStream定义了各种数据类型的写入方法write()方法,用于写入 Java 基础数据类型的数据和String数据:
在这里插入图片描述

数据输入流DataInputStream
DataInputStream继承自FilterInputStream,而 FilterInputStream 又继承了 InputStream,该数据输入流拥有基本数据类型的数据读取操作。使用readUTF()方法可从数据输入流中读取字符串。
DataInputStream中定义了各种数据类型的读取方法read(),用于读取 Java 基础数据类型的数据和String型的数据:
在这里插入图片描述
下面是一个演示例程:

package file;
import java.io.*;
public class DataIOTest {
	public static void main(String[] args) {
		String path =  "D:/src/tmp/testFile.txt";
		try (DataOutputStream dos = new DataOutputStream(new FileOutputStream(new File(path)));
			DataInputStream dis = new DataInputStream(new FileInputStream(new File(path)))) {
			dos.writeInt(128);
			dos.writeBoolean(true);
			dos.writeDouble(3.1416);
			dos.writeUTF("天佑中华!");
			dos.flush();
			
			int i = dis.readInt();
			boolean flag = dis.readBoolean();
			double d = dis.readDouble();
			String tempUTF = dis.readUTF();
			System.out.println(i+" : "+flag+" : "+d+" : "+tempUTF);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

参考资料:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值