Java I/O

作者: CodingHou | 来源:发表于2017-02-07 17:22 被阅读33次
    1. File类
      实用类库工具:帮助我们处理文件目录的问题。
      File既能代表一个特定文件的名称,又能代表一个目录下的一组文件的名称。
      如果它指的是一个文件集,那就可以对此集合调用list()方法, 这个方法会返回一个字符数组。

    1.1 目录列表器

    如果想查看File对象包含的全部列表,那就调用不带参数的list()方法。
    如果想获得一个受限列表,就要用到目录过滤器。

    1.2 目录实用工具

    1. 输入和输出
      流是一个抽象的概念,它代表任何有能力产出数据的数据源对象或者是有能力接受数据的数据端对象,流屏蔽了实际的IO设备中处理数据的细节。
      任何自InputStream或Reader派生而来的类都含有名为read()的基本方法,用于读取单个字节或者字节数组。
      任何自OutputStream或Writer派生而来的类都含有名为write()的基本方法,用于写单个字节或字节数组。
      我们很少通过单一的类来创建流对象,而是通过叠合多个对象来提供所期望的功能。

    2. 添加属性和有用的接口
      FilterInputStream和FilterOutputStream是用来提供装饰器类接口已控制特定输入流和输出流的两个类。

    3.1 通过FilterInputStream从InputStream读取数据

    FilterInputStream类能够完成两件完全不同的事情。
    DateInputStream允许我们读取不同的基本类型数据以及String对象。
    其他FilterInputStream类则在内部修改InputStream的行为方式。

    3.2 通过FilterOutputStream向OutputSteam写入 ###

    类 功能 Cool
    col 3 is right-aligned $1600
    col 2 is centered $12
    zebra stripes are neat $1

    1. Reader和Writer
      Reader和Writer的继承层次结构主要是为了国际化。老的IO流仅支持8位字节流,不能很好耳钉处理16位的Unicode字符。

    4.1 数据的来源和去处

    也就是各种read相对应的writer类

    4.2 更改流的行为

    4.3 未发生变化的类

    有些类在Java1.0和Java1.1之间没有发生改变

    1. 自我独立的类: RandomAccessFile
      RandomAccessFile适用于由大小已知的记录组成的文件。
      RandomAccessFile的工作方式类似于把DataInputStream和DataOutStream组合起来使用,还添加了一些方法。

    2. I/O流的典型使用方式
      6.1 缓冲输入文件

    6.2 从内存输入

    6.3 格式化的内存输入

    使用DateInputStream, 它是一个面向字节的IO类。所以W我们必须使用InputStream类而不是Reader类。

    6.4 基本的文件输出

    6.5 存储和恢复数据

    6.6 读写随机访问文件

    6.7 管道流

    用于任务之间的通信

    1. 文件读写的实用工具
      读取文件到内存,修改然后写出,这样的常见操作需要写相当多的代码。所以我们需要在类库中添加帮助类。

    2. 标准I/O
      8.1 从标准输入中读取

    8.2 将System.out转换成PrintWriter

    PrintWriter out = new PrintWriter(System.out, true); out.println("Hello, world");
    8.3 标准IO重定向

    1. 进程控制
    2. 新I/O
    3. 压缩
      JavaIo支持读写压缩格式的数据流。 属于InputStream和OutputSteam继承层次结构的一部分。

    11.1 用GZIP进行简单压缩

    直接将输出流封装成GZIPOutputStream或者ZipOutputStream。
    输出流封装成GZIPInputStream或者ZipInputStream。

    11.2 用Zip进行多文件保存

    11.3 Java档案文件

    命令符

    1. 对象序列化
      Java的对象序列化将那些实现了Serializable接口的对象转换成一个字节序列,并能够在以后将这个字节序列完全恢复为原来的对象。

    12.1 寻找类

    通过序列化来还原对象的时候,必须保证Java虚拟机能够找到相关的.class文件

    12.2 序列化的控制

    某些特定子对象不想让Java的序列化机制自动保存与恢复,而是重新创建。
    对于Serializable对象,对象完全以它存储的二进制位为基础来构造,而不调用构造器。
    而对于Externalizable对象,所有普通的默认构造器都会被调用,(包括在字段定义时的初始化),然后再调用readExternal()。
    如果我们从一个Externalizable对象继承,通常需要调用基类版本的writeExternal()和readExternal()来为基类组件提供恰当的存储和恢复功能。
    所以我们要writeExternal()方法中将来自对象的重要信息写入,还必须在readExternal()中恢复数据。

    transient(瞬时)关键字

    某些特定子对象不想让Java的序列化机制自动保存与恢复。
    方法一是将类实现为Externalizable。
    方法二是将类实现为Serializable,然后利用transient关键字逐个字段地关闭序列化。

    Externalizable的替代方法

    如果不是特别坚持实现Externalizable接口,那么可以实现Serializable接口,并添加writeObject()和readObject()方法。
    在调用ObjectOutputStream.writeObject()时,会检查所传递的Serializable对象,看看是否实现了它自己的writeObject()方法,如果是这样,就跳过正常的序列化过程并调用它的writeObject()。
    readObject()相同。

    12.3 使用“持久性

    1. XML

    2. Preferences

    3. 总结

    相关文章

      网友评论

        本文标题:Java I/O

        本文链接:https://www.haomeiwen.com/subject/tpdmittx.html