java输入输出流08_数据流

1.数据流概述

上一章节我们学习了打印流,通过打印流我们可以将任意数据类型的数据写入到文件中,但是打印流只有输出流,没有输入流,也就是只能存不能取。

另外,我们通过对源码进行分析,发现打印流最终写入文件的数据类型都为字符串类型。也就是说,我们通过打印流存储的int、double、char、boolean、String和引用数据类型等数据,最后写入文件的类型都是字符串类型。
在这里插入图片描述
那么有没有一种IO流,既能够实现基本数据类型和String类型(暂时不考虑别的引用数据类型)的存取操作,又能实现存、取数据类型的一致性呢?答案就是:数据流。

数据流将“基本数据类型与字符串类型”作为数据源,以DataInputStream和DataOutputStream来操作基本数据类型和字符串类型数据。

注意:数据流只有字节流,没有字符流。

2.DataOutputStream类

DataOutputStream数据输出流允许应用程序以适当方式将基本数据类型和字符串类型数据写入文件中,常见的方法有:writeByte()、writeShort()、writeInt()、writeLong()、writeFloat()、writeDouble()、writeChar()、writeBoolean()、writeUTF()等方法。

【示例】把基本数据类型和String类型写入文件中

public class DataStreamTest {
	public static void main(String[] args)  {
		DataOutputStream dos = null;
		try {
			// 字节输出流
			FileOutputStream fos = new FileOutputStream("a.txt");
			// 缓冲流
			BufferedOutputStream bos = new BufferedOutputStream(fos);
			// 数据输出流
			dos = new DataOutputStream(bos);
			// 数据输出
			dos.writeInt(123); // 写入int类型数据
			dos.writeDouble(123.45); // 写入Double类型数据
			dos.writeBoolean(false); // 写入Boolean类型数据
			dos.writeUTF("whsxt"); // 写入String类型数据
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if(dos != null) {
				// 关闭流
				try {
					dos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

注意:通过DataOutputStream写入文件的数据为二进制数据,打开文件就是一堆乱码。

3.DataInputStream类

使用DataOutputStream写入文件的二进制数据,必须通过DataInputStream来读取,并且读取的顺序必须和写入的顺序相同。

常见的方法有:readByte()、readShort()、readInt()、readLong()、readFloat()、readDouble()、readChar()、readBoolean()、readUTF()等方法。

【示例】读取数据流写入的文件数据

public class DataStreamTest {
	public static void main(String[] args) {
		DataInputStream dis = null;
		try {
			// 字节输入流, “a.txt”就是前面DataOutputStream写入的文件
			FileInputStream fos = new FileInputStream("a.txt");
			// 缓冲流
			BufferedInputStream bos = new BufferedInputStream(fos);
			// 数据输入流
			dis = new DataInputStream(bos);
			// 读取数据,需要保证存取顺序一致
			int i = dis.readInt();
			double d = dis.readDouble();
			boolean b = dis.readBoolean();
			String str = dis.readUTF();
			System.out.println(i + " " + d + " " + b + " " + str);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (dis != null) {
				try {
					dis.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

注意: 要用DataInputStream读取文件,这个文件必须是由DataOutputStream 写出的,否则会抛出EOFException异常,因为DataOutputStream 在写出的时候会做一些特殊标记,只有DataInputStream 才能成功的读取。

ps:如需最新的免费文档资料和教学视频,请添加QQ群(627407545)领取。

发布了92 篇原创文章 · 获赞 0 · 访问量 2610

猜你喜欢

转载自blog.csdn.net/zhoujunfeng121/article/details/104703535