本文为大家解析java中Serializable接口的作用,具体内容如下

1.(serializable)主要支持对象的回复,所以可以用来保存当前的程序系统状态,远程方法调用RMI(远程机器必须含有必要的.class文件,否则将掷出classNotFound Exception),但是因为它将对象数据自动全部保存,你根本无法插手,因此对于一些敏感字段(如:password)存在安全问题。但相应有很多解决的方法,例如可以在敏感字段的声明中使用transient关键字,或者去继承externalizable接口,自己来实现readExternal()和writerExternal()方法,再或者继承serializable接口,但提供private void writeObject(ObjectOutputStream s)等方法... ...但注意static 成员的保存仍需要你的介入。
2.1.网络传输
2.数据库持久
3.把对象保存为文件形式,以便以后还原
Object serialization的定义:
Object serialization 允许你将实现了Serializable接口的对象转换为字节序列,这些字节序列可以被完全存储以备以后重新生成原来的对象。
serialization不但可以在本机做,而且可以经由网络操作(RMI)。这个好处是很大的----因为它自动屏蔽了操作系统的差异,字节顺序(用Unix下的c开发过网络编程的人应该知道这个概念)等。比如,在Window平台生成一个对象并序列化之,然后通过网络传到一台Unix机器上,然后可以在这台Unix机器上正确地重构这个对象。
Object serialization主要用来支持2种主要的特性:
1、Java的RMI(remote method invocation).RMI允许象在本机上一样操作远程机器上的对象。当发送消息给远程对象时,就需要用到serializaiton机制来发送参数和接收返回直。
2、Java的JavaBeans. Bean的状态信息通常是在设计时配置的。Bean的状态信息必须被存起来,以便当程序运行时能恢复这些状态信息。这也需要serializaiton机制。
二、sakulagi和rollingpig说的持久化我也说一下。
我觉得你们说的应该是英文里的persistence.但是Java语言里现在只支持lightweight persistence,就是轻量级持久化,这是通过serialization机制来实现的。
persistence是指一个对象的生命周期不由程序是否执行来决定,即使是在程序终止时这个对象也存在。它把一个serializable的对象写到磁盘(本机或其他机器上的非RAM存储器),并在程序重新调用时再读取对象到通常的RAM存储器。
为什么说Java的serialization机制实现的是lightweight persistence?因为你必须显式的序列化和反序列化程序里的对象;而不是直接由一个关键词来定义一个对象是序列化的然后由系统做相应的处理。
下面是关于序列化的一个实例:
程序名称:SerializationDemo.java
程序主题:实现对象的序列化和反序列化
程序说明:该程序由实例化一个MyClass类的对象开始,该对象有三个实例变量,类型分别为String、int、double,是希望存储和恢复的信息。
代码内容
import java.io.*;
public class SerializationDemo{
public static void main(String args[]){
//Object serialization
try{
MyClass object1=new MyClass("Hello",-7,2.7e10);
System.out.println("object1:"+object1);
FileOutputStream fos=new FileOutputStream("serial");
ObjectOutputStream oos=new ObjectOutputStream(fos);
oos.writeObject(object1);
oos.flush();
oos.close();
}
catch(Exception e){
System.out.println("Exception during serialization:"+e);
System.exit(0);
}
//Object deserialization
try{
MyClass object2;
FileInputStream fis=new FileInputStream("serial");
ObjectInputStream ois=new ObjectInputStream(fis);
object2=(MyClass)ois.readObject();
ois.close();
System.out.println("object2:"+object2);
}
catch(Exception e){
System.out.println("Exception during deserialization:"+e);
System.exit(0);
}
}
}
class MyClass implements Serializable{
String s;
int i;
double d;
public MyClass(String s,int i,double d){
this.s=s;
this.i=i;
this.d=d;
}
public String toString(){
return "s="+s+";i="+i+";d="+d;
}
}
程序运行结果:object1和object2的实例变量是一样的,输出如下:[code:1:a55efb5f91]object1:s=Hello;i=-7;d=2.7E10
object2:s=Hello;i=-7;d=2.7E10
一个小例子:
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
/**
* @author Yan Chenyang
*
* TODO 要更改此生成的类型注释的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
public class JFunction implements Serializable{
private double[][] bounds;
private int vnum;
private double result;
private String funcname;
public JFunction(){
super();
this.bounds=null;
this.vnum=0;
this.result=0.0;
this.funcname=null;
}
public JFunction(double[][] bounds){
super();
this.bounds=bounds;
this.vnum=bounds[0].length;
this.result=0.0;
this.funcname="Function 1";
}
public double Func(double[] var){
result=0.0;
for(int i=0;i<var.length;i++)
result+=var[i];
return result;
}
public static JFunction deserialize(ObjectInputStream oin)
throws Exception{
JFunction f=(JFunction)oin.readObject();
return f;
}
public void serialize(ObjectOutputStream oout)
throws Exception{
oout.writeObject(this);
}
public String toString(){
return funcname ;
}
/**
* @return 返回 funcname。
*/
public String getFuncname() {
return funcname;
}
/**
* @param funcname 要设置的 funcname。
*/
public void setFuncname(String funcname) {
this.funcname = funcname;
}
}
public class JFunctionTest0 {
public static void main(String[] args){
double[][] bounds={{-2.048,-2.048},{2.048,2.048}};
JFunction function=new JFunction(bounds);
Interpreter interpreter=new Interpreter();
try {
double[] x={2.15,1.00};
interpreter.set("var",x);
interpreter.source("c:/x.bsh");
System.out.println(interpreter.get("ret"));
} catch (EvalError e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
FileInputStream in=null;
FileOutputStream out=null;
ObjectInputStream oin=null;
ObjectOutputStream oout=null;
try{
out = new FileOutputStream("function1.func");
oout = new ObjectOutputStream(out);
function.serialize(oout);//序列化
oout.close();
oout=null;
in = new FileInputStream("function1.func");
oin = new ObjectInputStream(in);
JFunction tfunction =JFunction.deserialize(oin);//反序列化
double[] var={2.0,5.0};
// System.out.println(tfunction.Func(var));
// System.out.println(tfunction);//打印结果
//
}catch(Exception ex){
ex.printStackTrace();
}finally{
try {
if (in != null) {
in.close();
}
if (oin != null) {
oin.close();
}
if (out != null) {
out.close();
}
if (oout != null) {
oout.close();
}
} catch (IOException ex1) {
ex1.printStackTrace();
}
}
}
}
序列化 用在 对象编码成字节流及从字节流编码重构对象。
序列化 为远程通信提供了标准的wire-level协议。
要使类的实例实现序列化,只要在它的声明中加入implements
java.io.Serializable
但是却由一些隐患
1.实现了序列化后,一旦发布,讲削弱改变类实现的灵活性。
2.增加了bug和安全漏洞的的可能性
3.当你的新版本发布时增加了相关的测试上的问题。
类应尽可能少的实现Serializable,接口也应该少去扩展它。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# java
# Serializable
# 接口
# 关于Java实体类Serializable序列化接口的作用和必要性解析
# Java中EnvironmentAware 接口的作用
# Java编程接口调用的作用及代码分享
# Serializable接口的作用_动力节点Java学院整理
# Java接口的作用_动力节点Java学院整理
# Java接口的作用以及使用说明
# 关键词
# 序列化
# 是在
# 自动生成
# 机器上
# 本机
# 来实现
# 的人
# 重构
# 的是
# 增加了
# 这是
# 实现了
# 我觉得
# 有很多
# 是指
# 并在
# 一台
# 这也
# 英文
相关文章:
建站之星好吗?新手能否轻松上手建站?
如何用西部建站助手快速创建专业网站?
建站之星如何助力企业快速打造五合一网站?
宝塔建站后网页无法访问如何解决?
建站之星安装后如何配置SEO及设计样式?
专业公司网站制作公司,用什么语言做企业网站比较好?
如何在Ubuntu系统下快速搭建WordPress个人网站?
建站主机选购指南与交易推荐:核心配置解析
如何在橙子建站中快速调整背景颜色?
网页设计与网站制作内容,怎样注册网站?
制作表格网站有哪些,线上表格怎么弄?
制作销售网站教学视频,销售网站有哪些?
c# F# 的 MailboxProcessor 和 C# 的 Actor 模型
如何配置FTP站点权限与安全设置?
如何在服务器上三步完成建站并提升流量?
常州自助建站费用包含哪些项目?
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析
建站之星如何助力网站排名飙升?揭秘高效技巧
开封网站制作公司,网络用语开封是什么意思?
中山网站制作网页,中山新生登记系统登记流程?
如何用免费手机建站系统零基础打造专业网站?
北京营销型网站制作公司,可以用python做一个营销推广网站吗?
建站主机如何安装配置?新手必看操作指南
建站之星后台管理系统如何操作?
如何制作算命网站,怎么注册算命网站?
宝塔建站助手安装配置与建站模板使用全流程解析
百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?
在线教育网站制作平台,山西立德教育官网?
如何在宝塔面板创建新站点?
网站app免费制作软件,能免费看各大网站视频的手机app?
定制建站流程步骤详解:一站式方案设计与开发指南
制作网站的过程怎么写,用凡科建站如何制作自己的网站?
南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站
宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
如何选择高性价比服务器搭建个人网站?
制作网站外包平台,自动化接单网站有哪些?
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南
官网建站费用明细查询_企业建站套餐价格及收费标准指南
如何使用Golang安装API文档生成工具_快速生成接口文档
如何在阿里云高效完成企业建站全流程?
打鱼网站制作软件,波克捕鱼官方号怎么注册?
如何在宝塔面板中修改默认建站目录?
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
如何通过FTP空间快速搭建安全高效网站?
营销式网站制作方案,销售哪个网站招聘效果最好?
*请认真填写需求信息,我们会在24小时内与您取得联系。