别想一下造出大海,必须先由小河川开始。
java中按照流的方向不同可以分为 输入流和输出流。
java中按照处理的数据单位不同分为 字节流和字符流。
输入流是从 文件读数据到程序中
输出流是从 程序写数据到文件中
字节流一次输入或输出:8位二进制
字符流一次输入或输出:16位二进制
字节流可以处理所有类型数据,如图片、MP3、AVI视频文件,而字符流只能处理字符数据,只要是处理纯文本数据,就优先考虑使用字符流,其余的使用字节流。
常用的四个基类:InputStream(字节输入流),OutputStream(字节输出流),Reader(字符输入流),Writer(字符输出流)
IO流大体的结构图如下:
Buffer缓冲流:BufferedInputStream,BufferedOutputStream,BufferedReader,BufferedWriter。是带缓冲区的处理流,
缓冲区的作用是避免每次和硬盘打交道,提高数据访问效率。
例子:BufferedInputStream bi = new BufferedInputStream(new FileInputStream(文件路径));
转换流:主要作用将字节流转换成字符流。用处较大!
InputStreamReader主要和InputStream套接
OutputStreamWriter主要和OutputStream套接
例子:OutputStreamWriter out = new OutputStream(new FileOutputStream(文件路径));
Print流
Print流只有输出流无输入流,PrintWriter和PrintStream分别针对字符字节
两个类提供了重载的Print和Println方法用于多种数据类型的输出
PrintWriter和PrintStream的输出操作不会抛出异常
PrintWriter和PrintStream有自动flush功能
一般是打印到控制台,可以进行控制打印的地方。
对象流
ObjectInputStream,ObjectOutputStream,(实现对象的序列化)用于直接把对象写入文件和从文件中读取对象,而不是一个个在转换成字符串再输入输出。
只有实现了Serializable接口的对象才可以被读写,Serializable接口只是个标记接口,没有定义方法。
writeObject(o)、readObject()是对象读写操作时用的方法。
数据流:DataInputStream,DataOutputStream。
因为平时若是我们输出一个8个字节的long类型或4个字节的float类型,那怎么办呢?可以一个字节一个字节输出,也可以把转换成字符串输出,但是这样转换费时间,若是直接输出该多好啊,因此这个数据流就解决了我们输出数据类型的困难。数据流可以直接输出float类型或long类型,支持直接输出输入各种数据类型,提高了数据读写的效率。
例子:long类型转换成byte类型输出
long n = 100000l;
DateOutputStream dos = new DateOutputStream(new ByteArrayOutputStream());
dos.writeLong(n);
IO例子: 复制文件操作,复制文件夹操作,删除文件目录操作