DAY019
一、IO流
1.IO概述
InputStream(输入流)
OutputStream(输出流)
两者都是相对于内存来说
2.流的分类
1、分类的方式有两种:按照功能可以分类,按照流向也可以分类
2、按照功能分类:
字节流:可以直接操作字节的流对象
字符流:可以直接操作字符的流对象
3、按照流向分类:
输入流:其他设备流到内存的流对象
输出流:内存流到其他设备的流对象
4、IO流的体系结构,根据分类,有四种流对象的类型
字节流:
字节输入流:InputStream
字节输出流:OutputStream
字符流:
字符输入流:Reader
字符输出流:Writer
3.写流要注意的事项
1.流对象都是java.io下
2. 在使用流的时候有很多异常要进行处理
3. 使用完流之后必须关闭资源
二、字节流
1.概述
1、可以直接操作字节信息的流对象
2、根据流向,可以分成字节输入流和字节输出流
3、顶层抽象父类分别是:InputStream 和 OutputStream
4、根据交互设备的不同,有不同的具体子类
2.读取数据: InputStream
- 这是一个抽象类是,不能实例化
- 是输入字节流的所有类的超类。
- 公有的方法:
public void close()throws IOException 关闭资源
public int available()throws IOException 返回从该输入流中可以读取(或跳过)的字节数的估计值
public abstract int read()throws IOException 从输入流读取数据的下一个字节 ,如果达到流的末尾, -1 。 返回值是当前的数据
public int read(byte[] b)throws IOException 从输入流读取一些字节数,并将它们存储到缓冲区b
3.FileInputStream
1、InputStream的一个具体子类,用于和磁盘上的文件进行交互
2、FileInputStream不仅可以一次读取一个字节,也可以一次读取很多个字节;不仅可以读取纯文本文件,也可以读取图片、视频、音频等非纯文本文件。一切数据在计算机中都是以字节的形式在存储和计算
3、构造方法
public FileInputStream(File file)throws FileNotFoundException file 表示要读取的文件对象
public FileInputStream(String name)throws FileNotFoundException name表示要读取的文件的路径
实例化对象的过程
1.实例化FileInputStream
2.判断这个文件是否存在,(不存在抛异常)
3.把FileInputStream 执行文件
输入流读取文件中的数据的基本步骤:
1.实例化FileInputStream
2.调用其读方法
3.关闭资源
注意事项:
1.byte数组一般是1024倍数
2.读取到数据都缓冲到字符数据里,如果一次读取两个字节,如果只存在一个,打印的数据也是两个字节,把前面的数据会填充出来
3.读取多个字节的返回值是 read(byte[] b) 是读取的字节的有效的个数
read()
1.一个一个字节进行读取
2.读取的数据就是其返回值
3.返回的是具体的数据(是字节)
read(byte[] b)
1.一次性可以读取多个字节
2.读取的数据就存在 数组
3.返回的是读取字节的有效个数
代码示例
public class Demo_1 {
//输入流inputStream
public static void main(String[] args) throws IOException {
// File f = new File("a.txt");
// 常用的FileInputStream的两种构造方法
FileInputStream fis = new FileInputStream(new File("a.txt"));
// FileInputStream fis2 = new FileInputStream("a.txt");
// System.out.println(fis.read());
// System.out.println(fis.read());
// System.out.println(fis.read());
//
// System.out.println(fis.read());
int i ;
while((i = fis.read())!=-1) {
System.out.println