当前位置: 首页 > news >正文

云南建设厅和网站主播网站开发

云南建设厅和网站,主播网站开发,商城网站架构,做网站要考虑的问题一.概念 Serialization#xff08;序列化#xff09;是一种将对象以一连串的字节描述的过程#xff1b;反序列化deserialization是一种将这些字节重建成一个对象的过程。将程序中的对象#xff0c;放入文件中保存就是序列化#xff0c;将文件中的字节码重新转成对象就是反…一.概念 Serialization序列化是一种将对象以一连串的字节描述的过程反序列化deserialization是一种将这些字节重建成一个对象的过程。将程序中的对象放入文件中保存就是序列化将文件中的字节码重新转成对象就是反序列化 二.要求 只有实现了Serializable或Externalizable接口的类的对象才能被序列化并且序列化对象的所有属性都需是可序列化的。 三.实现 serializable接口 1.1方法 序列化创建一个ObjectOutputStream输出流调用 ObjectOutputStream 对象的 writeObject() 输出可序列化对象 反序列化:创建一个ObjectInputStream输出流调用 ObjectInputStream 对象的 readObject()得到反序列化的对象 1.2代码 import java.io.*; import java.lang.reflect.Method;class User implements Serializable{private String name;private int age;Overridepublic String toString(){return User{ name name , ageage};}public void setName(String name) {this.name name;}public void setAge(int age) {this.age age;} } public class Main {public static void main(String[] args) throws Exception {ObjectOutputStream outnew ObjectOutputStream(new FileOutputStream(E:\\tao.txt));//创建一个ObjectOutputStream流将序列化对象输出到tao.txtUser usernew User();user.setName(tao);user.setAge(20);//实例化Userout.writeObject(user);ObjectInputStream innew ObjectInputStream(new FileInputStream(E:\\tao.txt));// 创建一个 ObjectOutputStream 输出流User tao(User)in.readObject();//将readObject反序列化的结果转化成User类实例成taoSystem.out.println(tao);} } User{nametao, age20}1.3注意 ①如果实现 Serializable 接口的类有父类则父类也必须可以序列化若父类没有实现序列化接口则父类必须有无参构造函数否则会抛异常 java.io.InvalidClassException。因为在父类没有实现 Serializable 接口时虚拟机是不会序列化父对象的而一个 Java 对象的构造必须先有父对象才有子对象反序列化也不例外。所以反序列化时为了构造父对象只能调用父类的无参构造函数作为默认的父对象。因此当我们取父对象的变量值时它的值是调用父类无参构造函数后的值。如果没有在父类无参构造函数中对父类变量进行初始化的话父类变量值都是默认声明的值如 int 型的默认是 0string 型的默认是 null。 ②序列化不保存静态变量因为序列化保存的是对象的状态而不是类的状态静态变量是类的状态 ③ 使用transient 关键字可以选择不需要序列化的字段 如: private transient String name; private transient int age; 进行序列化的时候name和age都不会被保存 Externalizable接口 2.1注意 ①Externalizable接口继承Serializable 接口 ②writeExternal()和readExternal()对应writeObject()和readObject()两个方法 ③Externalizable序列化没有属性限制静态变量以及transient 关键字修饰的属性都能被序列化 ④必须提供public的无参构造方法因为在反序列化实现 Externalizabale 接口的类的时需要通过反射创建对象。如果没有无参数的构造方法在运行时会抛出异常java.io.InvalidClassException 2.2代码 import java.io.*; import java.lang.reflect.Method;class User implements Externalizable{private String name;private int age;public User(){}//加上public无参构造器Overridepublic String toString(){return User{ name name , ageage};}public void setName(String name) {this.name name;}public void setAge(int age) {this.age age;}Override//重写writeExternal()方法public void writeExternal(ObjectOutput out) throws IOException{out.writeObject(name);}Override//重写wreadExternal()方法public void readExternal(ObjectInput in) throws IOException,ClassNotFoundException{name(String)in.readObject();}} public class Main {public static void main(String[] args) throws Exception {ObjectOutputStream outnew ObjectOutputStream(new FileOutputStream(E:\\tao.txt));//创建一个ObjectOutputStream流将序列化对象输出到tao.txtUser usernew User();user.setName(tao);user.setAge(20);//实例化Userout.writeObject(user);ObjectInputStream innew ObjectInputStream(new FileInputStream(E:\\tao.txt));// 创建一个 ObjectOutputStream 输出流User tao(User)in.readObject();//将readObject反序列化的结果转化成User类实例成taoSystem.out.println(tao);} } result User{nametao, age0} age变成了0 因为使用Externalizable接口需要重写writeExternal() 与 readExternal() 方法我只写了name的实现没有写ageint型默认值为0 四.安全 java反序列化会自动触发readObject()方法类似于php反序列化的__destruct()函数 java支持自定义writeObject()和readObject()方法 如果某个类中自定义了readObject()方法当对其的一个实例化对象进行反序列化就会调用readObject()方法 import java.io.*; import java.lang.reflect.Method;class User implements Serializable{private String name;private int age;Overridepublic String toString(){return User{ name name , ageage};}public void setName(String name) {this.name name;}public void setAge(int age) {this.age age;}private void readObject(ObjectInputStream in){System.out.println(这是新的readObject!);} } public class Main {public static void main(String[] args) throws Exception {ObjectOutputStream outnew ObjectOutputStream(new FileOutputStream(E:\\tao.txt));//创建一个ObjectOutputStream流将序列化对象输出到tao.txtUser usernew User();user.setName(tao);user.setAge(20);//实例化Userout.writeObject(user);ObjectInputStream innew ObjectInputStream(new FileInputStream(E:\\tao.txt));// 创建一个 ObjectOutputStream 输出流User tao(User)in.readObject();//将readObject反序列化的结果转化成User类实例成taoSystem.out.println(tao);} } 结果 这是新的readObject! User{namenull, age0} 可见在反序列化的时候实现了新的readObject() 那么就可以命令执行了 private void readObject(ObjectInputStream in) throws IOException{Runtime.getRuntime().exec(calc);} 弹计算器了 这里初步了解java序列化与反序列话后续构造链会继续学习。 参考博客 java基础知识点2序列化与反序列化详解_java序列化和反序列化-CSDN博客 javasec/2.java序列化与反序列化.md at master · Maskhe/javasec (github.com)
http://www.hyszgw.com/news/80535/

相关文章:

  • 商城网站建设付款怎么实现wordpress wp-postviews
  • 做网站网站多久会被抓湖北省建设主管网站
  • 嘉兴建设工程造价信息网站网站哪个语言好
  • 长沙做营销型网站公司货源网站开发
  • 廊坊网站公司网站建设多少钱
  • 购书网站开发杭州网站设计优异柚v米科技
  • 长基建站网站设计培训班哪家好
  • 网站功能模块 分析最近下载的网站怎么找
  • 做微商网站发帖免费教程三明市住房与建设局网站
  • 怎样做销售水蜜桃网站建筑模板网
  • 网站建设课程大纲全网线报 实时更新
  • dm网站制作软件乐清问政网络平台
  • dnf做任务解除制裁网站优秀的公司网站
  • php 怎么做 网站 图片淘宝网网页版登录
  • 房地产型网站建设开服网站源码
  • 企业网站模板下载软件青岛网站建设建议
  • 网站编辑面试九龙坡建站公司
  • 怎样建设一个卡盟网站冠县快搜网站建设有限公司
  • 辽阳企业网站建设企业管理培训课程是不是传销
  • 下载网站源文件管理咨询公司简介范文
  • 旅游网站建设经费预算应聘的做网站推广的
  • 导购网站做基础销量找合伙人做红木家具网站
  • 手机做网站价格网站建设和维护教程
  • 高端网站制作系统上海网站设计制作公司
  • 行业网站制作二级黄冈站
  • 鹿泉网络推广seo就业哪家好
  • 企业网站建设报价方案做外贸学网站
  • c 网站做微信支付功能做网站空间500m多少钱
  • 为什么有的网站只有版权没有备案外贸做网站公司哪家好
  • 洛阳恒凯做的网站有哪些工信部备案查询网址