对象流的使用:
- ObjectInputStream和ObjectOutputStream
- 作用:用于存储和读取基本数据类型或对象的处理流。它的强大之处就是可以把Java中的对象写入到数据源中,也可以把对象从数据源中还原回来。
/*
序列化过程:将内存中的java对象保存到磁盘中或通过网络传输出去
使用ObjectOutputStream来实现
*/
@Test
public void test1(){
ObjectOutputStream oos= null;
try {
//1.
oos = new ObjectOutputStream(new FileOutputStream("Object.dat"));
//2.
oos.writeObject(new String("我爱吃番茄"));
oos.flush();//刷新操作
} catch (IOException e) {
e.printStackTrace();
} finally
//3.关闭流
{
if(oos!=null){
try {
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/*
反序列化的过程:将磁盘文件中的对象还原为内存中的java对象
使用ObjectInputStream来实现
*/
@Test
public void test2(){
ObjectInputStream ois= null;
try {
ois = new ObjectInputStream(new FileInputStream("Object.dat"));
Object object = ois.readObject();
String str=(String)object;
System.out.println(str);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
if(ois!=null){
try {
ois.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
- 3.要想java对象是可序列化的,需要满足的要求:
- 需要实现接口(标识接口):Serializable 或 Externalizable
- 需要当前类提供一个全局常量
- 补充:ObjectOutputStream和ObjectInputStream不能序列化static和transient修饰的成员
public class Person implements Serializable {
public static final long serialVersionUID=84651665451l;
private String name;
private int age;
public Person(String name,int age){
this.age=age;
this.name=name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
/*
序列化过程:将内存中的java对象保存到磁盘中或通过网络传输出去
使用ObjectOutputStream来实现
*/
@Test
public void test1(){
ObjectOutputStream oos= null;
try {
//1.
oos = new ObjectOutputStream(new FileOutputStream("Object.dat"));
//2.
oos.writeObject(new String("我爱吃番茄"));
oos.flush();//刷新操作
oos.writeObject(new Person("小杨",23));
oos.flush();
} catch (IOException e) {
e.printStackTrace();
} finally
//3.关闭流
{
if(oos!=null){
try {
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/*
反序列化的过程:将磁盘文件中的对象还原为内存中的java对象
使用ObjectInputStream来实现
*/
@Test
public void test2(){
ObjectInputStream ois= null;
try {
ois = new ObjectInputStream(new FileInputStream("Object.dat"));
Object object = ois.readObject();
String str=(String)object;
Person p=(Person) ois.readObject();
System.out.println(str);//我爱吃番茄
System.out.println(p);//Person{name='小杨', age=23}
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
if(ois!=null){
try {
ois.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}