Java:I/O流相关

基本数据流

DataInputStream / DataOutPutStream
操作基本数据类型的流,可以读写各种基本数据


内存操作流

对内存中的变量进行 I / O 操作 有C语言sprintf函数的影子
又像集合中的toArray填充一个数组
可以把流中的东西写到变量中去

  • 操作字节数组
    • ByteArrayInputStream
    • ByteArrayOutputStream
  • 操作字符数组
    • CharArrayReader
    • CharArrayWriter
  • 操作字符串
    • StringReader
    • StringWriter
      关闭ByteArrayInputStream没有任何效果; 在关闭流之后,可以调用此类中的方法,而不生成IOException

打印流
  • 字节打印流 PrintStream
  • 字符打印流 PrintWriter
    向文本输出流打印对象的格式化表示形式
    可输出各种类型的数据
    基于别的流构造该类的对象时,可选第二个参数为true开启自动刷新
    自动刷新在调用println,printf,及format方法时,自动flush
    该类流可以在文件上进行操作

标准输入输出流

System中的两个静态常量inout分别代表系统标准的输入输出设备,默认输入设备是键盘,默认输出设备为显示器
System.in的类型是InputStream,System.out的类型为PrintStream


随机访问流

严格来说RandomAcessFile并不是一种Stream,因为它直接继承于Object
但是它实现了InputStream与OutputStream的功能,支持对随机访问文件的读取和写入
使用getFilePointer方法得到目前文件指针的位置,使用seek方法改变文件指针的位置


序列化流

ObjectOutputStream 序列化流 将对象序列化后写入文件
ObjectInputStream 反序列化流 将序列化的数据转换为对象

序列化

  • 以某种存储形式使自定义对象持久化
  • 可以使对象在不同环境中传递
  • 实现了标记接口Serializable 的类可以序列化
    //反序列化的错误问题
    序列化会记录对象的类的UID,而Java文件每次修改会使UID变化,本地类的UID与序列化数据中的UID不同产生异常,因此在该类中定义出UID静态常量即可
    使用transient关键字修饰的成员变量会防止被序列化

集合Properties (属性)

Properties是Hashtable的子类,所以具有Map的性质

  • Properties特有的方法

    • public Object setProperty(String key,String value)//规定了键和值都为String的Map的put方法
    • public String getProperty(String key)//使用此属性列表中指定的键搜索属性
    • public Set < String > stringPropertyNames()//返回键与值均为String类型的键
  • Properties与 I / O 流的结合使用

    • public void load(Reader reader)//把流(文件)中的键值对数据放到集合中
    • public void store(Writer writer , String comments) //把集合中的数据放到流(文件)中

2018/8/6

posted @ 2018-08-06 16:51  kafm  阅读(51)  评论(0编辑  收藏  举报