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

网站建设不开单开发新客户的十大渠道

网站建设不开单,开发新客户的十大渠道,巨好用企业网站源码,福州网站建设制作品牌企业什么是serialVersionUIDJava(TM)对象序列化规范中描述到:serialVersionUID用作Serializable类中的版本控件。如果您没有显式声明serialVersionUID,JVM将根据您的Serializable类的各个方面自动为您执行此操作。(http://docs.oracle…
  1. 什么是serialVersionUID

Java(TM)对象序列化规范中描述到:serialVersionUID用作Serializable类中的版本控件。如果您没有显式声明serialVersionUID,JVM将根据您的Serializable类的各个方面自动为您执行此操作。(http://docs.oracle.com/javase/1.5.0/docs/api/java/io/Serializable.html)。

  1. 对象序列化

声明对象:

package com.shamee.demo;public class Student {private String name;private int age;public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}
}

创建序列化测试类:

package com.shamee.demo;import org.junit.jupiter.api.Test;import java.io.*;public class ObjectIOStreamTest {@Testpublic void writeToStream(){try(ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("student.obj")))) {oos.writeObject(new Student("张三", 18));oos.flush();} catch (Exception e) {e.printStackTrace();}}@Testpublic void readForStream(){try(ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("student.obj")))) {Object o = ois.readObject();System.out.println(o.toString());} catch (Exception e) {e.printStackTrace();}}
}

运行结果:

  1. 序列化条件

  1. 实现Serializable接口

  1. 声明serialVersionUID常量。

package com.shamee.demo;import java.io.Serializable;public class Student implements Serializable {private static final long serialVersionUID = 42L;private String name;private int age;public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}
}

在此运行结果:

已能够正常序列化。

  1. Serializable接口

查看Serializable接口源码可以看出,该接口没有声明任何方法,是一个标识接口。实现该接口的对象均会被识别为可序列化对象。

/**
The serialization runtime associates with each serializable class a version* number, called a serialVersionUID, which is used during deserialization to* verify that the sender and receiver of a serialized object have loaded* classes for that object that are compatible with respect to serialization.* If the receiver has loaded a class for the object that has a different* serialVersionUID than that of the corresponding sender's class, then* deserialization will result in an {@link InvalidClassException}.  A* serializable class can declare its own serialVersionUID explicitly by* declaring a field named <code>"serialVersionUID"</code> that must be static,* final, and of type <code>long</code>:** <PRE>* ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L; 
If a serializable class does not explicitly declare a serialVersionUID, then
* the serialization runtime will calculate a default serialVersionUID value
* for that class based on various aspects of the class, as described in the
* Java(TM) Object Serialization Specification.   However, it is strongly
* recommended that all serializable classes explicitly declare
* serialVersionUID values, since the default serialVersionUID computation is
* highly sensitive to class details that may vary depending on compiler
* implementations, and can thus result in unexpected
* InvalidClassExceptions during deserialization.
*/

从注释中可以看出,实现该接口。需要显示声明一个serialVersionUID。用于序列化运行时与每个可序列化类关联一个版本编号,称为serialVersionUID,在反序列化过程中使用验证序列化对象的发送方和接收方是否已经加载。

如果可序列化类没有显式声明serialVersionUID,则序列化运行时将计算一个默认serialVersionUID,因为默认的serialVersionUID计算为高度敏感的类细节,可能变化取决于编译器实现,从而导致意外在反序列化期间InvalidClassException。

简单的说,就是该serialVersionUID用于标识对象序列和反序列化过程中是唯一匹配的。

  1. 自动生成的serialVersionUID问题

自动生成的serialVersionUID可能会导致序列化和反序列化中导致异常。具体实验步骤:

  1. 声明student类,实现Serializable接口,不显式声明serialVersionUID

  1. 将对象进行序列化

  1. 修改student类

  1. 将student对象进行反序列化

声明student类:

package com.shamee.demo;import java.io.Serializable;public class Student implements Serializable {private String name;private int age;public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}
}

序列化:

@Testpublic void writeToStream(){try(ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("student.obj")))) {oos.writeObject(new Student("张三", 18));oos.flush();} catch (Exception e) {e.printStackTrace();}}

序列化成功:

修改student类:

package com.shamee.demo;import java.io.Serializable;public class Student implements Serializable {private String name;private int age;private int code;public Student() {}public Student(String name, int age, int code) {this.name = name;this.age = age;this.code = code;}public int getCode() {return code;}public void setCode(int code) {this.code = code;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +", code=" + code +'}';}
}

接着反序列化:

直接报错,从报错信息可以看出:serialVersionUID自动生成取决于class类的字节码。因为前后类的变更导致对象的serialVersionUID发生变化,导致对象在序列化和反序列化中找不到唯一匹配标识,从而导致异常。

所以需要显式声明serialVersionUID。

  1. 如何生成serialVersionUID

IDEA点击File->Editor->Inspections。搜索框搜索UID,选择Serializable class without 'serialVersionUID'右侧复选框打勾,右下角Severity选择warning,点击OK。

之后序列化类右侧会有警告标签,点击警告标签有提示Add 'serialVersionUID' field,点击即可快速生成serialVersionUID。

无聊的小知识+1!!!

http://www.hrbkazy.com/news/37532.html

相关文章:

  • 我下载的免费网站模版源代码是加密的重庆网站seo教程
  • 太原要做网站的公司苏州网站seo服务
  • 建网站怎么做市场推广工作内容
  • 哪有做网站的北京cms建站模板
  • 网站开发要用多少钱seo是什么
  • 苹果手机怎么做微电影网站吗最新seo课程
  • 免费做流程图的网站广州网站建设系统
  • 个人创办网站杭州优化商务服务公司
  • 1688品牌加盟网文明seo技术教程网
  • 德州网站seo免费推广的渠道有哪些
  • 网站怎么做友情链接制作网页教程
  • 请人帮忙做网站推广家居seo整站优化方案
  • 上市公司做网站北京seo供应商
  • 怎么用切片和dw做网站网络营销课程思政
  • 对于网站建设的体会谷歌搜索引擎入口2021
  • 橙云网站建设青岛网站优化公司哪家好
  • 建设制作外贸网站的公司简介google权重查询
  • 在长沙做网站需要多少钱数字营销服务商seo
  • tp框架做展示网站北京网站seo哪家公司好
  • 网站图片加水印baidu百度首页官网
  • wap网站一键生成app企业网站的推广方法有哪些
  • 招代理的网站建设公司类聚seo
  • 时光轴网站模板东莞网络推广及优化
  • 成立做网站的公司微信营销号
  • 临汾工程建设招标投标网站口碑营销渠道
  • 网站手机版怎么做广州seo服务外包
  • 南山做棋牌网站建设什么是电商平台推广
  • facebook做网站网站建设网络营销
  • 东莞松山湖凯悦酒店深圳关键词优化怎么样
  • 长沙网站建设政府补贴百度站长之家