操作字节的IO流

本文详细介绍了字节流的基本概念及应用,包括InputStream和OutputStream类的功能及其子类的使用方法。通过实例展示了如何使用字节流进行文件读写操作,以及如何通过过滤流DataInputStream和DataOutputStream处理不同类型的Java数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

字节流以字节为单位,用来读取8位的数据,除了能够处理纯文本之外,还能用来处理二进制文件的数据。

InputStream类和OutputStream类是所有字节流的父类。

InputStream类

面向字节的输入流都是InputStream类的子类,其类的结构层次如图:


类名功能描述
FileInputStream从文件中读取的输入流
PipedInputStream输入管道
FilterInputStream过滤输入流
ByteArrayInputStream从字节数组读取的输入流
SequenceInputStream两个或多个输入流的联合输入流,按顺序读取
ObjectInputStream对象的输入流
LineNumberInputStream为文本文件输入流附加行号
DataInputStream包含读取 Java 标准数据类型方法的输入流
BufferedInputStream缓冲输入流
PushbackInputStream返回一个字节并把此字节放回输入流
OutputStream类

类名功能描述
FileOutputStream写入文件的输出流
PipedOutputStream输出管道
FilterOutputStream过滤输出流
ByteArrayOutputStream写入字节数组的输出流
ObjectOutputStream对象的输出流
DataOutputStream包含写Java标准数据类型方法的输出流
BufferedOutputStream缓冲输出流
PrintStream包含print()和println()的输出流

由于这两个都是抽象类,所以使用时创建的输入输出流对象一般都是它们的子类对象。

下面看一个例子,从控制台输入数据,然后输入字符‘#’表示输入完毕,并把数据存到文件中。

public class Demo3 {

	public static void main(String[] args) throws IOException {
		String filePath="C:\\Users\\xiake\\Desktop\\文本.txt";
		InputStream in=new FileInputStream(FileDescriptor.in);
		OutputStream out=new FileOutputStream(filePath);
		int c;
		while((c=in.read())!='#'){
			out.write(c);
		}
		System.out.println("end");
	}
}

FileDescriptor是java.io中的一个类,该类不能实例化,其中包含三个静态变量:in,out和err。分别对应标准输入流、标准输出流、标准错误流,利用它们可以在标准输入输出流上建立文件输入输出流,实现键盘输入或屏幕输出操作。

过滤流

常用的两个过滤流是数据输入流DataInputStream和数据输出流DataOutputStream。

由于DataInputStream和DataOutStream分别实现了DataInput和DataOutput两个接口(这两个接口规定了基本类型数据的输入输出)中定义的独立于具体机器的带格式的读写操作。从而实现了对不同类型数据的读写。

看个例子,将三个基本数据类型存入文件中,然后再从文件中读取出来:

public class Demo4 {

	public static void main(String[] args) throws IOException {
		String filePath="C:\\Users\\xiake\\Desktop\\文本.txt";
		DataOutputStream out=new DataOutputStream(new FileOutputStream(filePath));
		//往文件中写入基本数据
		out.writeInt(100);
		out.writeInt(-100);
		out.writeInt(1);
		out.close();
		//
		DataInputStream in=new DataInputStream(new FileInputStream(filePath));
		//从文件中读出基本数据
		System.out.println(in.readInt());
		System.out.println(in.readInt());
		System.out.println(in.readInt());
		in.close();
	}

}

运行结果:

100
-100
1
标准输入输出流

System.in、System.out、Systeim.err这三个标准输入输出流对象定义再java.lang.System类中,这三个对象在Java源程序编译时会被自动加载。

  1. 标准输入:标准输入System.in是BufferedInputStream类的对象,当程序需要从键盘上读入数据时,只需要调用System.in的read()方法即可,该方法从键盘缓冲区读入一个字节的二进制数据,返回以此字节为低字节,高字节为0的整形数据。
  2. 标准输出:标准输出System.out是打印输出流PrintStream类的对象,PrintStream类是过滤输出流类FilterOutputStream的一个子类,其中定义了向屏幕输出不同类型数据的方法print()和println()。
  3. 标准错误输出:System.err用于向用户显示错误信息,也是由PrintStream类派生出来的错误流。err流的作用是使print()和println()将信息输出到err流并显示在屏幕上,以方便用户使用和调试程序。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值