17 Java中的IO流

JavaSE 基础之十七

17 Java中的IO流

① 流的基本概念

1. 流的来源

  1. 数据保存在内存中,一旦系统运行完毕,或者中途中断退出,当前操作的数据全部消失,下次再访问系统数据已经丢失。
  2. 如果要将系统的数据保存起来,就需要流的操作,文件的操作。

2. 流的基本概念

  1. java程序中当需要读取数据的时候,就开启一个通向数据源的设备流,这个流可以是文件、内存、网络资源。
  2. 获取来源:硬盘文件、内存获取、网络资源
  3. 当程序需要写入数据的时候,开启一个通往目的地的设备流。这个时候可以将数据理解为流,在管道里面进行传输和流动。

3. 流的特征

  1. 具有流质
  2. 具有方向:硬盘文件 → 程序、程序 → 硬盘文件

② 流的分类及使用

1. 按照方向来分

(1) 输入流
1. InputStream
    1. FileInputStream:对二进制的文件进行操作。数据源一般为磁盘。
    2. PipedInputStream:主要针对线程管道。
    3. StringBufferInputStream:用于操作字符串的流。
    4. ObjectInputStream:对象流,用于操作内存中对象。
    5. FilterInputStream:过滤流,提供的子类非常重要,管道里面的内容读完了,返回-1。
        - LineNumberInputStream:表示程序读取哪一行,计数器。
        - DataInputStream:数据操作流,提供了一系列的功能,读取的数据转化为一个byte、boolean、long、float、字符串输出。
        - BufferedInputStream:缓冲流, 套在响应节点流基础之上,对读写数据提供缓冲的功能,提高了读写的效率,同时还增加了一些额外的方法。(缓冲区:在内存空间开辟一个缓冲区域,读写先将数据放入缓冲区,减少对磁盘的读写。)例如:byte[ ] = new byte[ 1024 ]; 
        - 使用缓冲流:
            * 减少对磁盘的io操作
            * 提高了数据读写的效率
2. Reader

(2) 输出流

1. OutputStream
    1. FileOutputStream
    2. PipedOutputStream
    3. ObjectOutputStream
    4. FilterOutputStream
        - DataOutputStream
        - BufferedOutputStream
        - PrintStream

2. 按照类型来分

(1) 字节流

1. InputStream
2. OutputStream

(2) 字符流

1. Reader
    1. InputStreamReader:转换流,可以将字节流转化为字符流。
    2. BufferedReader
    3. FilterReader
    4. StringReader
    5. PipedReader
2. Writer
    1. OutputStreamWriter
    2. BufferedWriter
    3. FilterWriter
    4. StringWriter
    5. PipedWriter

3. 按照功能来分

1. 节点流
    1. 从一个特定的数据源读取数据。
    2. 一般直接操作文件或者网络等提供的流。直接从文件读取数据,将数据直接写入到文件中。也称为低级流。
2. 处理流。
    1. 不直接连接到设备上,而是建立在其它流之上,通过对数据的处理提供更强大的功能。也称为高级流。
    2. 在低级流的基础之上,继续扩展和优化了功能。

4. 操作流的步骤

  1. 建立流:根据不同类型的数据选择不同的流操作。
  2. 操作流:将数据读取到内存,或者将内存数据写入到数据源。
  3. 关闭流:操作结束后,需要将流关闭,释放所有的资源。

③ 对象流的使用

1. file文件类的操作

  1. java.io 包提供了一个类,主要用于管理磁盘里面的所有文件或者文件的目录,比如:文件的大小、名字、类型都可以操作,唯一不能操作文件内容。
  2. file类描述的是一个文件、或者一个文件夹
  3. file类出现的目的:封装file对象提供各种文件操作方法,供开发过程中直接调用接口可以完成某些特定的功能(创建一个文件夹、删除一个文件夹、判断文件是否存在)。

2. 对象的操作

  1. 序列化
    1. ObjectOutputStream
    2. 概念: 将所有的Object对象转化为byte为单位的内容传输到目的地(磁盘、网络空间)。
    3. 规范:
      1. 要序列化的对象必须要实现Serializable接口,如果没有实现接口,序列化的时候抛出没有实现接口的异常。
      2. 静态变量和成员方法不能序列化。
      3. 一个类要被序列化,则该类引用的对象也应该是可以被序列化的。否则整个序列化过程将失败。
      4. 声明transient关键字,可以控制当前属性不被序列化。
  2. 反序列化
    1. ObjectInputStream
    2. 概念:将磁盘中的数据以byte为单位读取,转化为Object对象放入内存。

猜你喜欢

转载自www.cnblogs.com/Gavin520/p/10580853.html