ObjectOutputStream(序列化流)
ObjectOutputStream是序列化流,可以将Java程序中的对象写到文件中。
ObjectOutputStream 构造方法:
ObjectOutputStream(OutputStream out):参数要传递字节输出流。
ObjectOutputStream写对象的方法(特有方法):
void writeObject(Object obj): 向文件中写对象。
ObjectOutputStream 的使用步骤:
创建序列化流,用来写。
调用 writeObject 方法,写对象。
释放资源。
注意: 要使用序列化流向文件中写的对象,必须实现 Serializable 接口。
例:
1 // 创建一个Person对象 2 Person p=new Person("大灰狼",18); 3 //明确目的地 4 FileOutputStream fos=new FileOutputStream("D:\demo0723\person.txt");//不能续写true 5 //创建序列化流 6 ObjectOutputStream oos=new ObjectOutputStream(fos); 7 //将对象写入文件中 8 oos.writeObject(p); 9 //释放资源 10 oos.close();
ObjectInputStream(反序列化流)
ObjectInputStream 是反序列化流, 可以将文件中的对象读取到 Java 程序中。
ObjectInputStream 的构造方法:
ObjectInputStream(InputStream in):参数要传递字节输入流。
ObjectInputStream 读取对象的方法(特有的方法):
Object readObject(): 从文件中读取对象,并将该对象返回。
反序列化流的使用步骤:
创建 ObjectInputStream 反序列化流。
调用 readObject 方法,读取对象。
释放资源。
注意:调用 readObject 方法读取对象时,对象所对应的类不存在,那么会报错(ClassNotFoundException)
1 public static void read() throws ClassNotFoundException, IOException{ 2 //明确数据源 3 FileInputStream fis=new FileInputStream("D:\demo0723\person.txt"); 4 //创建反序列化刘 5 ObjectInputStream ois=new ObjectInputStream(fis); 6 //从person.txt中将对象读取出来 7 Person p=(Person)ois.readObject(); 8 System.out.println(p); 9 //释放资源 10 ois.close(); 11 }
特殊情况:
被 static 修饰的成员变量无法序列化,无法写到文件。
如果不希望某个成员变量写到文件,同时又不希望使用 static 关键字, 那么可以使用 transient。transient 关键字表示瞬态,被 transient 修饰的成员变量无法被序列化。
如果想要修改序列化后的文件 ,也可以加serialVersionUID,使序列化时生成的值与反序列化时值一致。
打印流:
打印流是输出信息最方便的类,注意包含字节打印流PrintStream和字符打印流:PrintWriter。打印流提供了非常方便的打印功能,
可以打印任何类型的数据信息,例如:小数,整数,字符串。
打印流的特点:
不负责数据源,只负责数据目的
为其他输出流,添加功能
永远不会抛出IO异常,但是可能抛出别的异常
特有的方法:print()和println()方法,System.out.print()方法可以打印任何数据类型。
PrintSteam构造方法接收:
File类型、字符串文件名、字节输出流OutputStream
例:
//明确目的地 FileOutputStream fos=new FileOutputStream("D:\demo0723\print.txt"); //创建打印流 PrintStream ps=new PrintStream(fos); //输出 ps.print("你好"); ps.print(true); ps.println(123); //释放资源 ps.close();
PrintWriter构造方法接收:
File类型、字符串文件名、字节输出流OutputStream、字符输出流Writer
例:
1 //明确目的地 2 FileWriter fw=new FileWriter("D:\demo0723\print.txt",true); //续写 3 //创建字符打印流 4 PrintWriter pw=new PrintWriter(fw,true);//自动刷新 5 //输出 6 pw.println(false); 7 pw.println("大灰狼"); 8 pw.print(1.2); 9 //释放资源 10 pw.close();