java.IO层次体系结构

 /*在整个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负责写字节
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值