操作字节的IO流

字节流以字节为单位,用来读取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流并显示在屏幕上,以方便用户使用和调试程序。


猜你喜欢

转载自blog.csdn.net/xkfanhua/article/details/80600265