import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Date;
/**
* 对象流
* 序列化:对象输出流 对象->字节数组(字节流)->(文件,数据库,内存等) ObjectOutputStream
* 反序列化:对象输入流 (文件,数据库,内存等)->字节数组(字节流)-> 对象 ObjectInputStream
* 先写出后读取
*
* 并非所有对象都可以序列化
*
* 必须实现serializable接口(空接口)
* @author 佳哥
*
*/
public class ObjectOITest {
public static void main(String[] args) throws IOException, ClassNotFoundException {
//序列化
//字节数组输出流
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//BufferedOutputStream(...)提高效率
ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(baos));
//加入对象
oos.writeObject("我叫佳哥,在测试对象流知识");//字符串也是对象String其中也实现了Serializable接口
oos.writeObject(new Date());//当前日期
Animals animals = new Animals("狗","白",2.0);//创建对象
oos.writeObject(animals);
oos.flush();
//反序列化
byte[] oosData = baos.toByteArray();
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(oosData));
//读取一定要按上面写入的顺序读
Object str = ois.readObject();
Object date = ois.readObject();
Object dog = ois.readObject();
//还原数据
if(str instanceof String)
{
String strObject = (String)str;
System.out.println(strObject);
}
if(date instanceof Date)
{
Date dateObject = (Date)date;
System.out.println(dateObject);
}
if(dog instanceof Animals)
{
Animals dogObject = (Animals)dog;
System.out.println(dogObject.getName()+"的颜色为:"+dogObject.getColor());
}
}
}
class Animals implements java.io.Serializable
{
private String name;
private String color;
private double age;//如果不想序列化 -->private transient double age;(透明)
//构造器
public Animals()
{
}
public Animals(String name, String color, double age) {
super();
this.name = name;
this.color = color;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public double getAge() {
return age;
}
public void setAge(double age) {
this.age = age;
}
}
Java 对象流
最新推荐文章于 2023-08-31 20:33:42 发布