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中的两个静态常量in,out分别代表系统标准的输入输出设备,默认输入设备是键盘,默认输出设备为显示器
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