JavaSE基础入门_016_I/O 框架

I/O 框架

流的概念

  • 概念:内存与存储设备之间传输数据的通道

  • 数据借助流传输

 

流的分类

  • 按方向【重点】:

    • 输入流:将 <存储设备> 中的内容读入到 <内存> 中。

    • 输出流:将 <内存> 中的内容写入到 <存储设备> 中。

 

  • 按单位:

    • 字节流:以字节为单位,可以读写所有数据。

    • 字符流:以字符为单位,只能读写文本数据。

 

  • 按功能:

    • 节点流:具有实际传输数据的读写功能。【底层流】

    • 过滤流:在节点流的基础之上增强功能。

 

字节流

  • 字节流的父类(抽象类):

    • InputStream:字节输入流

      • public int read(){}
        public int read(byte[] b){}
        public int read(byte[] b, int off, int len){}
    • OutputStream:字节输出流

      • public void write(int n){}
        public void write(byte[] b){}
        public void write(byte[] b, int off, int len){}

文件字节流

  • FileInputStream:

    • public int read(byte[] b) // 从流中读取多个字节,将读到内容存入b数组,返回实际读到的字节数;如果达到文件的尾部,则返回 -1。
  • FileOutputStream:

    • public void write(byte[] b) // 一次写入多个字节,将b数组中所有字节,写入输出流。

 

字节缓冲流

  • 缓冲流:BufferedInputStream/BufferedOutputStream

    • 提高 IO 效率,减少访问磁盘的次数;

    • 数据存储在缓冲区中,flush是将缓存区的内容写入文件中,也可以直接close。

 

对象流

  • 对象流:ObjectOutputStream/ObjectInputStream

    • 增强了缓冲区功能

    • 增强了读写8种基本数据类型和字符串功能

    • 增强了读写对象的功能:

      1. readObject()从流中读取一个对象,注意读了两个对象会造成: EOF 异常

      2. writeObject(Object obj)向流中写入一个对象,要求被写入的类要实现 Serializable 标记接口

  • 使用流传输对象的过程称为序列化:把内存中对象写入流中、反序列化:从流种读取对象。

 

  • 注意要求:

    • (1) 序列化类必须要实现 Serializable 标记接口

    • (2) 序列化类种对象属性要求实现 Serializable 标记接口【属性是一个类的时候】

    • (3) 序列化版本号ID,保证序列化的类和反序列化的类是同一个类

    • (4) 使用 transient(瞬间的,只在内存上临时存在) 关键字,修饰属性,该属性不能被序列化了

    • (5) 静态属性不能序列化

    • (6) 序列化多个对象,可以借助集合实现

 

编码方式

字符编码

  • ISO—8859—1: 收录除 ASCII 外,还包括西欧、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号

  • UTF—8:针对Unicode码表的可变长度字符编码,万国码

  • GB2312:简体中文

  • GBK:简体中文、扩充

  • BIG5:台湾、繁体中文

 

  • 当编码方式和解码方式不一致时,会出现乱码。

 

字符流

  • 字符流的父类(抽象类):

    • Reader:字符读取输入流

      • public int read(){}

        public int read(char[] c){}

        public int read(char[] b, int off, int len){}
    • Writer:字符写入输出流

      • public void write(int n){}

        public void write(String str){}

        public void write(char[] c){}

         

文件字符流

  • FileReader:

    • public int read(char[] c)
      // 从流中读取多个字符,将读到内容存入 c 数组,返回实际读到的字符数;如果达到文件的尾部,则返回 -1
  • FileWriter:

    • public void write(String str)
      // 一次写多个字符,将字符串中所有字符,写入输出流

 

字符缓冲流

  • 缓冲流:BufferedReader / BufferedWriter

    • 高效读写

    • 支持输入换行符

    • 可一次写一行、读一行

 

打印流

  • PrintWriter:

    • 封装了 print() / println() 方法,支持写入后换行

    • 支持数据原样打印

 

转换流

  • 桥转换流:InputStreamReader / OutputStreamWriter

    • 可将字节流转换为字符流。

    • 可设置字符的编码方式。

    • InputStreamReader :字节流通向字符流的桥梁,硬盘写内存

    • OutputStreamWriter:字符流通向字节流的桥梁,内存写硬盘

 

File类

  • 概念:代表物理盘符中的一个文件或者文件夹

  • 方法:

    • createNewFile() //创建一个新文件
      mkdir() //创建一个新目录
      delete() //删除文件或空目录
      exists() //判断File对象所代表的对象是否存在
      getAbsolutePath() //获取文件的绝对路径
      getName() //取得名字
      getParent() //获取文件,目录所在的父目录
      isDirectory()//是否是目录
      isFile()// 是否是文件
      length()//获取文件长度
      listFiles()//列出目录中的所有内容
      renameTo()//修改文件名为

 

FileFilter接口

  • public interface FileFilter
    • boolean accept(File pathname)
  • 当调用File类中的 listFiles() 方法时,支持传入FileFilter接口实现类,对获取文件进行过滤,只有满足条件的文件才可出现在 listFiles()的返回值中。

 

Properties

  • Properties:属性集合,继承 HashTable,线程安全的集合

  • 特点:

    1. 存储属性名和属性值,键值对

    2. 属性名和属性值都是字符串类型

    3. 没有泛型

    4. 和流有关

 

总结

  • 流的概念:

    • 内存与存储设备之间传输数据的通道。

  • 流的分类:

    • 输入流、输出流;字节流、字符流;节点流、过滤流;

  • 序列化、反序列化:

    • 将对象通过流写入到文件,或将对象通过流读取到内存,必须实现 Serializable 接口。

  • File对象:

    • 代表物理盘符中的一个文件或者文件夹。

    •  

posted @ 2020-06-12 21:48  云川望雨  阅读(116)  评论(0编辑  收藏  举报