数据流的概念
在 Java 中,把所有的输入和输出都当做流来处理。 “ 流 ” 是一个抽象概念,它代表任何有能力产出数据的数据源对象或者是有能力接收数据的接收端对象。 “ 流 ” 屏蔽了实际的输入 / 输出设备中处理数据的细节。一个程序可以打开一个数据源上的流,然后按顺序读取这个流中的数据到程序中,这样的流称为输入流,其过程如图所示。一个程序也可以打开一个目的地的流,然后按顺序的把程序中的数据写入到这个目地中,这样的流称为输出流。
加深理解:输入输出是相对程序而言的。
流的分类
两种分法:
1.Java 的输入 / 输出流中,根据它们的数据类型,主要可分为两类:字符流 (Character Stream) 和字节流 (Btye Stream) 。
字符流 (character Stream) 字符流的输入 / 输出数据是字符码, 即 Unicode 字符。
字符流有两个基本类: Reader 类和 Writer 类。 Reader 类用于处理字符输入流, Writer 类用于处理字符输出流。 它们都是抽象类,本身不能直接用来创建对象。提供了一些方法。
字节流 (Btye Stream) 字节流是按字节读 / 写二进制数据。
字节流有两个基本的类: InputStream 类和 OutputStream 类。 InputStream类用于处理字节输入流, OutputStream 类用于处理字节输出流。它们都是抽象类,本身不能直接用来创建对象。InputStream 类和 OutputStream 类为其它字节输入 / 输出流子类提供了一些基本方法和标准接口。
2.按照流是否直接与特定的地方(如磁盘、内存等)相连,分为节点流与处理流。
节点流:可以从或者向一个特定的地方(节点)读写数据。如文件流 FileReader 。
处理流:是对一个已经存在的流的连接和封装,通过所封装的流的功能调用实现数据读、写功能。处理流也称过滤流,如缓冲处理流BufferedReader 。
字节流和字符流比较
1、字节流在操作的时候本身是不会用到缓冲区的,是文件本身的直接操作的,但是字符流在操作的 时候下后是会用到缓冲区的,是通过缓冲区来操作文件的。
2、使用字节流好还是字符流好呢?
字节流。首先因为硬盘上的所有文件都是以字节的形式进行传输或者保存的,包括图片等内容。但是字符只是在内存中才会形成的,所以在开发中,字节流使用广泛。
字节和字符转换流
整个IO类中除了字节流和字符流外,还包括字节和字符转换流。
OutputStreramWriter将输出的字符流转化为字节流;InputStreamReader将输入的字节流转换为字符流。但是不管如何操作,最后都是以字节的形式保存在文件中的。