Java 对象流
对象流
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接口的类,因此程序可以实现把组件写入输出流,然后用输入流读取该组件的克隆。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
linux积累
1、运行Python文件,将文件的输出赋值给一个变量 read -r lines_in_json <<<$(python count_the_lines_in_json.py)
- 下一篇
(分享) 为什么说React是UI的未来
我们曾经认为太阳围绕地球运行,把瘟疫看作神对人类的惩罚,而现在我们坚信MVC架构和双向数据绑定就是构建Web UI程序的最佳方式。 过去,人们没有更好的方式来探寻这个世界,由于认知的局限,人们对这些“误解”深信不疑。 最终,天文学家证明了日心说,医生发现疾病是由细菌引起的。类似的,React引入了单向数据流的概念。 这些发现都没有立刻得到大众认可。伽利略的理论被认定为异端邪说。Semmelweis 博士发现疾病源于细菌,然而同事不接受他的这一研究成果,最后遗憾的在一庇护所中含恨而终。而如今,我们仍然误认为所有的UI架构都是平等的。 我坚信React,或者类似的东西,将是用户界面开发的未来。此刻,希望你不要立刻跳到文章末尾表达赞同或者反对意见,请先耐心看完文章正文,我会告诉你我这么认为的理由。 React的视野更为广阔 React是一个由聪明人创造的聪明想法的集合。当React首次公布时,主要的卖点在于它的渲染方式:如果将应用程序结构与底层渲染DOM分开,我们可以实现声明式的视图渲染语法,同时仍然能够应用最优的DOM突变。 它的思想别具一格,比如,它认为通过将代码分离为HTML、Java...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS关闭SELinux安全模块
- CentOS8编译安装MySQL8.0.19
- Linux系统CentOS6、CentOS7手动修改IP地址
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果