字符缓冲流,properties类,序列化流与反序列化流,打印流
1.字符缓冲流的写法与字节缓冲流类似,也是用字符缓冲对象嵌套字符读写对象。格式为:
BufferedReader br=new BufferedReader(new FileReader(数据源));
BufferedWriter bw=new BufferedWriter(new FileWriter(目的地));
2.BufferedReader有一个优势是可以读取一个文本行,它的方法是readLine(),这与FileReader相区别。
3.在IO操作时选用哪个对象,要看输入还是输出,文本还是图像等,需不需要加速,是否需要转换编码。根据不同的需求选择合适的对象。
4.Properties类是一个持久的属性类,它是HashTable的子类,可以使用map集合的所有方法。它没有泛型,内部存的都是字符串,它的内部存的都是键值对。注意,Properties中存的键值对虽然都是String类型,但是不能写引号,也不能写分号。
5.Properties与HashMap类似,它的存入数据是通过setProperty方法,它的读取是通过stringPropertyNames方法来获得内部键值的key值的Set集合。
下面是一个小例子:
public static void main(String[] args) { Properties pro=new Properties(); pro.setProperty("a","1"); pro.setProperty("b","2"); pro.setProperty("c","3"); String a=pro.getProperty("a"); //遍历 Set<String> set=pro.stringPropertyNames(); for(String str:set){ String key=str; String value=pro.getProperty(key); System.out.println(key+"..."+value); } }
6.Properties通过load方法,读取硬盘的properties文件,load(源数据的流对象文件,可以是FileReader或FileInputStream);通过Store方法,写入硬盘的properties文件,store(目的地的流对象文件,可以是FileWriter或FileOutputStream,“提示信息”)。
下面是个小例子:
public static void main(String[] args) throws IOException { Properties pro=new Properties(); pro.setProperty("school", "清华"); pro.setProperty("father", "李刚"); FileWriter fw=new FileWriter("C:\\Users\\Rui\\Desktop\\read\\pro.properties",true); pro.store(fw, "message"); fw.flush(); fw.close(); }
7.对象序列化流和反序列化流是将对象写入文件和从文件中读取对象的操作,其中写入文件的对象无法被查看(乱码)。
序列化的类为ObjectOutputStream,创建对象时在构造方法中写入字节输出流对象,然后调用该对象的write(对象)方法来完成对象的序列化;反序列化的类为ObjectInputStream,创建对象时在构造方法中写入字节输入流对象,然后调用该对象的read(对象)方法来完成对象的反序列化。注:只有实现了Serializable接口的对象才能被写入和读取。
8.如果对象在序列化的过程中,不希望修改类成员变量,又不想用Static修饰,可以用transient修饰。这样序列化该类的对象时该成员变量就不会被序列化了。
9.PrintWriter/PrintStream( 流对象的目的地,true)可以开启print的自动刷新功能,打印流的print方法输入什么就是打印什么,write方法要会参照码表打印出来。