31、IO字节流
1、概述
硬盘的输入输出流
顶层四个父类
输入流 | 输出流 | |
---|---|---|
字节流 | 字节输入流InputStream | 字节输出流OuterStream |
字符流 | 字符输入流Reader | 字符输出流Writer |
在电脑中,所有数据都是以字节的形式存储的
2、输出流OutputStream
输出流中定义了一些子类共性的成员方法
void close()
关闭此输出流并释放与此流有关的所有系统资源。
void flush()
刷新此输出流并强制写出所有缓冲的输出字节。
void write(byte[] b)
将 b.length 个字节从指定的 byte 数组写入此输出流。
void write(byte[] b, int off, int len)
将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。
abstract void write(int b)
将指定的字节写入此输出流。
输出流不能直接创建对象,要使用其子类FileoutStream(文件字节输出流)
2.1、FileOutStream
作用
把内存中的数据写入硬盘
构造
FileoutStream(String name)
//创建一个向具有指定名称的文件中写入数据的输出文件流
FileoutStream(File file)
//作用相同
两个构造的参数都是一个文件
构造的作用
- 创建一个FileoutStream对象
- 会根据构造中传递的文件/路径创建一个空文件
- 会把FileOutStream对象指向创建好的空文件
使用步骤
- 创建一个FileOutStream对象,构造方法中传递写入数据的目的地
- 调用write方法,把数据写入
- 释放资源
2.2、write方法
void write(byte[] b)
将b.length个字节从指定的byte数组写入此输出流
一次写入多个字节时:
- 如果第一个字节时正数,那么显示的结果hi按ASC码表显示
- 如果第一个是负数,那么第一个字节和第二个字节会组成一个中文(GBK)
void write(byte[] b,int off,int len)
把字节数组的一部分写入,第二个参数是开始索引,第三个是写入的长度
2.3、追加和续写
使用两个参数的构造即可
FileOutputStream(String name, boolean append)
创建一个向具有指定 name 的文件中写入数据的输出文件流
FileOutputStream(File file, boolean append)
创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
参数:第一个是路径,第二个是追加/续写的开关,为true就不会覆盖
换行符:\r\n
3、输入流InPutStream
java.io.InputStream字节输入流是一个抽象类
此抽象类是所有字节输入流的父类
共有方法
int read()从输入流中读取数据的下一个字节
int read(byte[] b, int off, int len)从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。
void close()关闭此文件输入流并释放与此流有关的所有系统资源。
3.1、FileInputStream类
FileInputStream类是输入流的常用类
构造
FileInputStream(String name)//通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定
FileInputStream(File file)//通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。
使用步骤
- 创建FileInputStream对象
- 使用对象的read方法
- 释放资源
3.2、一次读取多个字节
int read(byte[] b)从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中
注意
- 方法的参数byte[] b的作用是起缓冲作用,存储每次读取的多个字节
- 方法的返回值是每次读取的有效字节个数
解释
- 每次读取的字节数量取决于byte[] b的长度
- 下一次读取会覆盖前一次读取存在数组中的字节