package com.io.file;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
/*
* 对对象进行操作,把对象数据存入到文件中,再从文件中读取
*/
public class Object_in_out {
public static void main(String[] args) {
try {
// write();
read();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void read() throws FileNotFoundException, IOException, ClassNotFoundException{
ObjectInputStream ois=new ObjectInputStream(new FileInputStream("g:/java/object.txt"));
Person p=(Person)ois.readObject();
System.out.println(p.getName()+",,,,,,,,"+p.getAge());
ois.close();
}
public static void write() throws FileNotFoundException, IOException{
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("g:/java/object.txt"));
oos.writeObject(new Person("aaa",33));//把对象写入到文件中
oos.close();
}
}
class Person implements Serializable{//注意这个对象类要实现Serializable序列化接口
//此接口会为该对象生成一个根据该对象的序列化id,如果本对象改变了,调用本对象的类要重新编译才行
//或者直接指定本对象的序列化id
public static final long serialVersionUID = 42L;//为本对象生成一个固定的系列化id,这样本类改变的话,调用类就不用重新编译了
private String name;
public static String country="";//注意这里,静态不能序列化,因为序列化的在对内存中,而静态在方法区中
private int age;
//如果不想被序列化,但又不定义静态,可以用transient关键字修饰,保证被修饰的可以在对内存中存在,但不能存放到文本文件中
//如这样定义就可以了:private transient int ages;
public Person(String name,int age){
this.name=name;
this.age=age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
黑马程序员——对象序列化,读取 存入文件ObjectIn(Out)putStream;非序列化,1,static;2,transient
最新推荐文章于 2023-05-14 16:47:58 发布