// 创建男和女对象
MAN("男"),
RY("人妖"),
WOMAN("女");
// 定义成员变量记录信息
private String info;
/*
public static final Gender 男 = new Gender();
public static final Gender MAN = new Gender("男");
public static final Gender WOMAN = new Gender("女");
*/
// 无参数构造
private Gender(){
System.out.println("无参数构造");
}
// 有参数构造
private Gender(String info){
System.out.println("有参数构造");
this.info = info;
}
@Override
public String toString() {
return info;
}
有用学习网站 :https://tool.lu/article?page=8
*/
public class ObjectOutputSteamDemo {
public static void main(String[] args) throws Exception{
// write();
read();
}
public static void write() throws Exception{
// 创建学生对象
Student stu = new Student("jack",90,20);
// 创建对象输出流
ObjectOutputStream oos = MyObjectOutputStream.getInstance(new File("stu.txt"));
oos.writeObject(stu);
// 关闭流
oos.close();
}
public static void read() throws Exception{
读取方法一/*try {
// 创建对象输入流
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("stu.txt"));
// 读取对象
Student stu = null;
while((stu = (Student)ois.readObject()) != null) {
System.out.println(stu);
}
// 关闭流
ois.close();
} catch (Exception e) {
}*/
FileInputStream fis = new FileInputStream("stu.txt");
// 创建对象输入流
ObjectInputStream ois = new ObjectInputStream(fis);
int len = 0;
// 读取对象
Student stu = null;
读取方法二// available();判断流关联的文件中是否还有数据可读,如果有返回非0,返回0表示没有数据可读了
while((len = fis.available()) != 0) {
System.out.println(ois.readObject());
}
// 关闭流
ois.close();
}
}
/**
* 自定义对象输出流
* @author pkxing
*
*/
class MyObjectOutputStream extends ObjectOutputStream {
// 文件对象
private static File file;
public static MyObjectOutputStream getInstance(File f) throws IOException{
file = f;
return new MyObjectOutputStream(new FileOutputStream(f,true));
}
public MyObjectOutputStream(OutputStream out) throws IOException {
super(out);
}
// 写出一个头部信息的方法
@Override
protected void writeStreamHeader() throws IOException {
// 判断是否是第一次保存对象,如果是则调用父类方法输出头部信息。
if(file.length() == 0 || !file.exists()){
super.writeStreamHeader();
} else {
}
}
}