使用 ObjectInputStream 类 ObjectOutputStream类
将对象整体 读 / 写文件中: 【读写对象】
1. ObjectInputStream类
(1)基本概念
java.io.ObjectInputStream类用于将文件的对象整体读取出来。
(2)常用的方法
构造方法:
ObjectInputStream(InputStream in) - 根据参数指定的引用构造对象。
- InputStream类是个抽象类,实参需要传递子类的对象。
普通方法:
Object readObject() - 用于读取输入流中的一个对象并返回。
- 无法根据返回值来判断是否读取到文件的末尾。
void close() - 关闭流对象。
代码:
写一个User类
package com.monekey1025; public class User implements java.io.Serializable{ private static final long serialVersionUID = 1L; private String userName; private String passWord; //transient修饰成员变量,表示该成员变量不能进行序列化操作 private transient String email; @Override public String toString() { return "User [userName=" + userName + ", passWord=" + passWord + ", email=" + email + "]"; } public User() { super(); } public User(String userName, String passWord, String email) { super(); setUserName(userName); setPassWord(passWord); setEmail(email); } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassWord() { return passWord; } public void setPassWord(String passWord) { this.passWord = passWord; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
package com.monekey1025; import java.io.FileInputStream; import java.io.ObjectInputStream; public class TestObjectInputStream { public static void main(String[] args) { try{ //1.创建ObjectInputStream类型的对象与指定的文件关联 ObjectInputStream ois = new ObjectInputStream( new FileInputStream("E:\welcome.txt")); //2.读取文件中的一个对象并打印出来 Object obj = ois.readObject(); if(obj instanceof User){ User user = (User)obj; System.out.println(user); } //3.关闭流对象 ois.close(); }catch(Exception e){ e.printStackTrace(); } } }
3.1 ObjectOutputStream类(重点)
(1)基本概念
java.io.ObjectOutputStream类用于将一个对象整体写入到输出流中。
只能将支持 java.io.Serializable 序列化 接口的对象写入流中。
类通过实现 java.io.Serializable 序列化 接口以启用其 序列化功能 (将整个对象的所有信息转换为字节流信息的过程)。
序列化: 把一个对象自动转换为字节流,然后整体写入到文件中的过程。
transient 关键字修饰成员变量,表示该成员变量 不能被进行序列化操作。
只要把一个对象整体写入到一个文件中,就必须让这个对象的类实现这个Serializable接口。
(2)常用的方法
构造方法:
ObjectOutputStream(OutputStream out) - 根据参数指定的引用构造对象。
- OutputStream类是抽象类,实参传递该类的子类对象。
普通方法:
void writeObject(Object obj) - 将参数指定的对象整体写入到流中。
void flush( ) - 刷新流对象。
void close( ) - 关闭流对象。
代码
import java.io.FileOutputStream; import java.io.ObjectOutputStream; public class TestObjectOutputStream { public static void main(String[] args) { try{ //1.创建ObjectOutputStream类的对象与指定的文件关联 ObjectOutputStream oos = new ObjectOutputStream( new FileOutputStream("c:/user.dat")); //2.准备User类型的对象并进行初始化 User user = new User("Mark", "123456", "xiaomg@163.com"); //3.将User类型的对象整体写入到文件中 oos.writeObject(user); System.out.println("写入对象成功!"); //4.关闭输出流对象 oos.flush(); oos.close(); }catch(Exception e){ e.printStackTrace(); } } }