您现在的位置是:首页 > 文章详情

Java 对象流

日期:2018-08-05点击:332

对象流

ObjectInputStream ObjectOutputStream类分别是InputStream和OutputStream的子类,对象输出流使用writeObject(Object obj)方法,将一个对象obj写入到一个文件,使用readObject()读取一个对象。

构造方法:

ObjectInputStream (InputStream in)

ObjectOutputStream(OutputStream out)

当准备将一个对象写入文件的时候,首先用OutputStream的子类创建一个输出流。

OutputStream outStream = new FileOutputStream("file_name");

ObjectOutputStream objstream = new ObjectOutputStream(outStream);

 

当使用对象流写入或者读取对象的时候,必须保证该对象是序列化的,这样是为了保证对象能够正确的写入文件,并能够把对象正确的读回程序。

所谓的对象的序列化就是将对象转换成二进制数据流的一种实现手段,通过将对象序列化,可以方便的实现对象的传输及保存。在Java中提供了ObejctInputStream 和ObjectOutputStream这两个类用于序列化对象的操作。用于存储和读取对象的输入输出流类,要想实现对象的序列化需要实现Serializable接口,但是Serializable接口中没有定义任何的方法,仅仅被用作一种标记,以被编译器作特殊处理。

 

package project;
import java.io.*;
//实现Serializable 接口
class TV implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1597309922188243103L;
String name;
int price;
public void setName(String name){
this.name = name;
}
public void setPrice(int price){
this.price = price;
}
public String getName() {
return name;
}
public int getPrice() {
return price;
}

}
public class Main{
public static void main(String[] args) {
TV changhongTv = new TV();
changhongTv.setName("长虹电视");
changhongTv.setPrice(5678);
File file = new File("changhong");
try {
//序列化写入文件
OutputStream outputStream = new FileOutputStream(file);
ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);
objectOutputStream.writeObject(changhongTv);
objectOutputStream.close();

//序列化读取对象
InputStream inputStream = new FileInputStream(file);
ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);
TV xinfeiTv = (TV)objectInputStream.readObject();
objectInputStream.close();


xinfeiTv.setName("新飞电视");
xinfeiTv.setPrice(6666);

System.out.println("changhong name "+changhongTv.getName());
System.out.println("changhong price "+changhongTv.getPrice());

System.out.println("xinfei name "+xinfeiTv.getName());
System.out.println("xinfei price "+xinfeiTv.getPrice());

} catch (ClassNotFoundException e) {
// TODO: handle exception
System.out.println("不能读取对象");
}catch (IOException e) {
// TODO: handle exception
System.out.println(e);
}
}
}

 

对象的序列化的实现方便了对象间的克隆,使得复制品实体的变化不会引起原对象实体的变化。

下面是一个实例:

 

另外,Java.awt包中的Componet类是实现Serializable接口的类,因此程序可以实现把组件写入输出流,然后用输入流读取该组件的克隆。

原文链接:https://yq.aliyun.com/articles/646911
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章