i/o流

 

1、IO流拓展

● io 流中对象很多,解决问题到底用哪个对象?
明确一:要操作的数据是数据源还是数据目的。

  源:InputStream  Reader

  目的:OutputStream  Writer

  先根据需求明确要读,还是要写。

明确二:要操作的数据是字节还是文本?

  源:字节-InputStream  文本-Reader

  目的:字节-OutputStream  文本-Writer

明确三:明确数据所在的具体设备?

  源设备:硬盘:文件  File 开头

      内存:数组  字符串

      键盘:System.in

      网络:Socket

  目的设备:硬盘:文件  File 开头

       内存:数组  字符串

       屏幕:System.out

       网络:Socket

  完全可以明白具体要使用哪个流对象

明确四:是否需要额外功能?

  转换吗?转换流。InputStreamReader  OutputStreamWriter

  高效吗?缓冲区对象。BufferedXXX

● i/o 流体系结构

InputStream

  FileInputStream

  BufferedInputStream

OutputStream

  FileOutputStream

  BufferedOutputStream

Writer

  OutputStreamWriter

    FileWriter

  BufferedWriter

Reader

  InputStreamReader

    FileReader

  BufferedReader

 

2、Properties 类

● 概述:Properties 类表示一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。

● 特点:1)Hashtable 的子类,map 集合中的方法都可以用。

      2)该集合没有泛型。键值对都是字符串。

      3)它是一个可持久化的属性集。键值可以存储到集合中,也可以存储到持久化的设备(硬盘、U盘、光盘)上。键值的来源也可以是持久化设备。

 

3、序列化接口

  Serializable 标记接口。该接口给需要序列化的类,提供了一个序列化版本号。 serialVersionUID 该版本号中的目的在于验证序列化的对象和对应类是否版本匹配。

  一个对象要能被序列化,必须实现 Serializable 接口。否则会发生异常 NotSerializableException 异常。

  同时当反序列化对象时。如果对象所属的 class 文件在序列化之后进行修改,那么进行反序列化也会发生异常 InvalidClassException 。发生这个异常的原因如下:

  1)该类的序列化版本号与从流中读取的类描述符的版本号不匹配

  2)该类包含未知数据类型

  3)该类没有可访问的无参数构造方法

注意:静态不能序列化。

 

4、打印流

● 特点:1)此流不负责数据源,只负责数据目的

      2)为其他输出流添加功能

      3)永远不会抛出 IOException,但是,可能抛出别的异常

● PrintStream 和 PrintWriter 的异同

  同:两个打印流的方法完全一致

  异:printstream 构造方法,接收 File 类型,接收字符串文件名,接收字节输出流 OutputStream

    printwriter 构造方法,接收 File 类型,接收字符串文件名,接收字节输出流 OutputStream,接收字符输出流 Writer

● 打印流可以开启自动刷新功能

  满足两个条件:1)输出的数据目的必须是流对象:OutputStream,Writer

            2)必须调用 println,printf,format 三个方法中的一个,启动自动刷新

注意:print(char[] x)打印结果不是哈希值,而是遍历后字符数组。其实是为打印 String 准备的

 

第三方工具类 commons-io

posted @ 2018-12-05 20:52  FanYiZhan  阅读(107)  评论(0编辑  收藏  举报