IO流概述
-
IO:Input和Output
-
输入输出流的意思:
-
IO流就是数据进行传输的管道;
-
读:Read(从硬盘到内存)
-
输入:Input
-
输入流(inputStream):(把数据传到程序中);
-
写:Write(从内存到硬盘)
-
输出:Output
-
输出流(outputStream):(把数据从程序中输出)。
-
IO流的分类
-
按照流的方向分类:以内存作为参照物
- 往内存中去,叫做输入(Input),或者叫做读(Read);
- 往内存中出来,叫做输出(Output),或者叫做写(Write)。
-
按照读取数据方式不同进行分类:
- 字节流:一次读取1个字节byte,等同于一次读取8个二进制位,这种是万能的,什么类型的文件都可以读取,包括:文本文件、视频、图片、声音文件…
- 字符流:一次读取一个字符,方便读取普通文本文件,但不能读取:图片、声音、视频等文件,只能读取纯文本文件,word文件也无法读取
注意:java中所有的流都在:java.io.*;下。
四大家族(都是抽象类:abstract class)
-
java.io.InputStream 字节输入流
-
java.io.OutputStream 字节输入流
-
java.io.Reader 字符输入流
-
java.io.Writer 字符输入流
注意:在java中只要“类名”以Stream结尾的都是字节流,以**“Reader/Writer”结尾的都是字符流**
-
所有的流都实现了:java.io.Closeable接口,都是可关闭的,都有close()方法。用完流一定要关闭。
-
所有的输出流都实现了:java.io.Flushable接口,表示可刷新的,都有flush()方法。输出后,记得flush()刷新一下,表示将通道/管道当中剩余未输出的数据强行输出完(清空管道)。
注意:如果没有flush()可能会导致丢失数据。
主要流(16个)
- 文件专属:
- java.io.FileInputStream
- java.io.FileOutputStream
- java.io.FileReader
- java.io.FileWriter
- 转换流:(将字节流转换成字符流)
- java.io.InputStreamReader
- java.io.OutputStreamWriter
- 缓冲流专属:
- java.io.BufferedReader
- java.io.BufferedWriter
- java.io.BufferedInputStream
- java.io.BufferedOutputStream
- 数据流专属:
- java.io.DataInputStream
- java.io.DataOutputStream
- 标准输出流:
- java.io.PrintWriter
- java.io.PrintStream
- 对象专属流:
- java.io.ObjectInputStream
- java.io.ObjectOutputStream