/*在整个Java.io包中最重要的就是5个类和一个接口。 5个类指的是File、OutputStream、InputStream、Writer、Reader;一个接口指的是Serializable.*/ 主要的类如下: 1. File(文件特征与管理):用于文件或者目录的描述信息,例如生成新目录,修改文件名,删除文件,判断文件所在路径等。 2. InputStream(二进制格式操作):抽象类,基于字节的输入操作,是所有 [字节] 输入流的父类。定义了所有 [字节] 输入流都具有的共同特征。 3. OutputStream(二进制格式操作):抽象类。基于字节的输出操作。是所有 [字节] 输出流的父类。定义了所有 [字节] 输出流都具有的共同特征。 Java中字符是采用Unicode标准,一个字符是16位,即一个字符使用两个字节来表示。为此,JAVA中引入了处理字符的流。 1. Reader(文件格式操作):抽象类,基于字符的输入操作,是所有 [字符] 输入流的父类。定义了所有 [字符] 输入流都具有的共同特征。。 2. Writer(文件格式操作):抽象类,基于字符的输出操作,是所有 [字节] 输出流的父类。定义了所有 [字符] 输入流都具有的共同特征。 Serializable:序列化接口 如果想将对象序列化,那么对象的类型必须实现此接口。
流:
输入(input):程序可以从中读取数据 //--读 输出(output):程序能向其中写入数据//--写 按流向分: 输入流: 程序可以从中读取数据的流 // InputStream (程序从输入流读取数据源。数据源包括外界(键盘、文件、网络…),即是将数据源读入到程序的通信通道) 输出流: 程序能向其中写入数据的流// OutputStream (程序向输出流写入数据。将程序中的数据输出到外界(显示器、打印机、文件、网络…)的通信通道。) 按数据传输单位分: 字节流: 以字节为单位传输数据的流 字符流: 以字符为单位传输数据的流 , Java中的字符是Unicode编码,一个字符占用两个字节。 按功能分: 节点流: 用于直接操作目标设备的流 过滤流: 是对一个已存在的流的链接和封装,通过对数据进行处理为程序提供功能强大、灵活的读写功能。 对象流: ObjectOutputStream:对象输出流 ObjectOutputStream(OutputStream out)创建一个指定字节输出流的对象输出流对象。 ObjectIntputStream:对象输入流 ObjectIntputStream(OutputStream out)创建一个指定字节输入流的对象输入流对象。
IO流的四大抽象类:
1.常见InputStream类(读数据) //低级 InputStream //是所有输入流的父类。定义了所有输入流都具有的共同特征。 FileInputStream // FileInputStream流被称为文件字节输入流,意思指对文件数据以字节的形式进行读取操作如读取图片视频等 ByteArrayInputStream PipedInputStream //高级 DataInputStream BufferedInputStream //缓冲字节输入流 用于加速传输数据 2.常见OutputStream(写数据) //低级 OutputStream //是所有输出流的父类。定义了所有输出流都具有的共同特征。 FileOutputStream //FileInputStream流被称为文件字节输出流,意思指对文件数据以字节的形式进行写入操作如写入图片视频等 //类用来创建一个文件并向文件中写数据。 //在打开文件进行输出前,目标文件不存在,那么该流会创建该文件。 ByteArrayOutputStream PipedOutputStream //高级 DataOutputStream BufferedOutputStream //缓冲字节输出流 用于加速传输数据 3.常见的Reader类 //低级 CharArrayReader StringReader PipedReader FileReader //文件读取流 //高级 BufferedReader //缓冲字符流,用于加快读取字符的速度 InputStreamReader //缓冲字符输入流 LineNumberReader 4.常见的Writer相关类 //低级 CharArrayWriter StringWriter PipedWriter FileWriter //文件写入流 //高级 BufferedWriter //缓冲字符流,用于加快写入字符度 OutputStreamWriter //缓冲字符输出 PrintWriter
对象流-------序列化与反序列化:
对象流(Object):有的时候,我们可能需要将内存中的对象持久化到硬盘上,或者将硬盘中的对象信息读到内存中,这个时候我们需要使用对象输入输出流。 序列化 是把对象的状态信息转化为可存储或传输的形式过程,也就是把对象转化为字节序列的过程称为对象的序列化 ( Java中对象的序列化指的是将对象转换成以字节序列的形式来表示,这些字节序列包含了对象的数据和信息,一个序列化后的对象可以被写到数据库或文件中,也可用于网络传输) 反序列化 是序列化的逆向过程,把字节数组反序列化为对象,把字节序列恢复为对象的过程成为对象的反序列化 对象流:(属于java.io.Object包) ObjectOutputStream:对象输出流 ObjectOutputStream(OutputStream out)创建一个指定字节输出流的对象输出流对象。 ObjectIntputStream:对象输入流 ObjectIntputStream(OutputStream out)创建一个指定字节输入流的对象输入流对象。 /*Serializable:序列化接口 如果想将对象序列化,那么对象的类型必须实现此接口。 */
字节流:
以字节为单位传输数据的流
在Java中,字节流一般适用于处理字节数据(诸如图片、视频),字符流适用于处理字符数据(诸如文本文件),但二者并没有严格的功能划分,因为有转换流的存在,使得对于数据的处理变得更加灵活。 InputStream和OutputStream分别是字节输入流与字节输出流的基类,它们的子类都是字节流,主要用在按字节来处理二进制数据。 InputStream:此抽象类是表示字节输入流的所有类的超类。 FileInputStream:用于读取文件系统的文件的输入流。
字符流:
以字符为单位传输数据的流
public static void main(String[] args) throws FileNotFoundException, UnsupportedEncodingException { PrintWriter pw = new PrintWriter("pw.txt","utf-8"); pw.println("我是宇宙无敌暴龙战士"); pw.println("你是超级无敌小菜鸡"); System.out.println("写入完成"); pw.close(); } PrintWriter给人一种可以直接对文件进行操作的假象 * PW是一个高级流 * 实际上PW包装了字节流、字符流和字符缓冲流。 * PW负责自动行刷新 * bw负责提高效率 * osw负责读字符 * fos负责写字节