一、 流的概述
1、什么是流
流根据方向不同分为输入流与输出流,参照点为当前程序。输入流用来读取数据,输出流用来写数据。
2、流的分类(2类)
- 节点流(也叫低级流)
是真实负责读写数据的流,读写操作中必须要有低级流。数据源明确。 - 处理流(也叫高级流)
读写可以没有高级流,高级流也不能独立存在,必须用于处理其他流,处理其他流的目的是简化读写数据中的操作。
3、低级流和高级流的关系
低级流可以类比为水管,而高级流则可以类比为加在水管上的热水器和净水器。所以会得出以下的结论:
- 低级流可以单独存在;而高级流必须依赖于低级流而存在。因为低级流是真实读写数据的流,高级流都是处理数据的。
- 高级流是用于简化数据读写的,所以我们用高级流的时候,需要想一下,这个高级流有什么样的功能。
- 高级流处理其他流就形成了流的连接。并且有效的组合不同的高级流可以得到叠加的效果。
- 有高级流的时候,直接关闭高级流就可以了,它会自动把所依赖的低级流关闭(就好像你只需要关闭热水器的开关就可以了)。
- 下面会分别介绍几个低级流和高级流
4、两个抽象类
InputStream
抽象类,是所有字节输入流的父类,定义了输入流的读取字节的方法,常用的方法如下:int read()
读取 一个字节,以int形式返回,该int值得“低八位”有效,若返回值为-1,则表示EOFint read(byte[])
尝试最多读取给定数组的length个字节并存入该数组,返回值为实际读取到的字节量
OutputStream
抽象类,是所有字节输出流的父类,定义了输出流的写入字节的方法,常用的方法如下:void write(int d)
写出一个字节,写的是给定的int的“低八位”void write(byte[] d)
将给定的字节数组中的所有字节全部写出
二、低级流
1、文件流
FileInputStream
文件的字节输入流,是一个低级流,该流可以以字节为单位从文件中读取数据。构造方法如下:FileInputStream(File file)
创建一个从指定File对象表示的文件中读取数据的文件输入流FileInputStream(String name)
创建用于读取给定的文件系统中的路径名name所指定的文件的文件输入流
FileOutputStream
文件的字节输出流,是一个低级流,该流可以以字节为单位将数据写入文件中。构造方法如下:FileOutputStream(File file)
创建一个向指定File对象表示的文件中写出数据的文件输出流。(如果指定的文件已经包含内容,会将原有数据全部清除)FileOutputStream(String name)
创建一个向具有指定名称的文件中写出数据的文件输出流。(如果指定的文件已经包含内容,会将原有数据全部清除)FileOutputStream(File file, boolean append)
创建一个向指定File对象表示的文件中写出数据的文件输出流。(如果第二个参数为true,则不会清除原数据,而是在文件末尾追加)FileOutputStream(String name, boolean append)
创建一个向具有指定名称的文件中写出数据的文件输出流。(如果第二个参数为true,则不会清除原数据,而是在文件末尾追加)
基本操作:
int read()
读取 一个字节,以int形式返回,该int值得“低八位”有效,若返回值为-1,则表示EOF
int read(byte[] b)
尝试最多读取给定数组的length个字节并存入该数组,返回值为实际读取到的字节量
void write(int d)
写出一个字节,写的是给定的int的“低八位”
void write(byte[] d)
将给定的字节数组中的所有字节全部写出
void write(byte[] d, int offset, int len)
将指定byte数组中从偏移量offset开始的len个字节写入此文件输出流
示例代码:
输入流
public class FISDemo {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("fis.txt");