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

深圳做网站建设和维护专员管理层营口品牌网站建设

深圳做网站建设和维护专员管理层,营口品牌网站建设,网站设计目标怎么写,撸撸撸做最好的导航网站写在前面 本文看下序列化和反序列化相关的内容。 源码 。 1#xff1a;为什么#xff0c;什么是序列化和反序列化 Java对象是在jvm的堆中的#xff0c;而堆其实就是一块内存#xff0c;如果jvm重启数据将会丢失#xff0c;当我们希望jvm重启也不要丢失某些对象#xff…写在前面 本文看下序列化和反序列化相关的内容。 源码 。 1为什么什么是序列化和反序列化 Java对象是在jvm的堆中的而堆其实就是一块内存如果jvm重启数据将会丢失当我们希望jvm重启也不要丢失某些对象或者是需要将某些对象传递到其他服务器rpc有没有时就需要使用到序列化和反序列化因为序列化就是将Java对象转换为文件而反序列化就是加载文件并生成对象在堆中。 2Java的序列化和反序列化 Java想要序列化和反序列化必须实现java.io.Serializable接口并给变量serialVersionUID赋值该值用来标识Java类文件的版本。如下序列化和反序列化的例子 SneakyThrows private static void javaDeserialize() {ObjectInputStream objectInputStream new ObjectInputStream(new FileInputStream(d:\\test\\xxx.obj));Student student (Student) objectInputStream.readObject();System.out.println(java反序列化student完成);System.out.println(student); }SneakyThrows private static void javaSerialize() throws IOException {Student student new Student();student.setName(张三);student.setAge(99);ObjectOutputStream objectOutputStream new ObjectOutputStream(new FileOutputStream(d:\\test\\xxx.obj));// 如果没有实现java.io.Serializable接口将会抛出异常java.io.NotSerializableExceptionobjectOutputStream.writeObject(student);objectOutputStream.close();System.out.println(java序列化student完成); }java序列化的问题: 1:无法跨平台如Java对象序列化的结果反序列化为python的对象这样就限制了其不适合某些使用场景如rpc的场景中就无法使用这种序列化方式因为rpc需要支持异构的系统 2序列化的文件大这样占用磁盘大网络传输速度慢占用带宽反序列化的速度也慢这样就限制了其不适合某些使用场景如rpcrpc需要尽量快的序列化和反序列化速度,以提高性能 3序列化的速度慢还是因为其序列化结果的内容多以上的问题我们可以使用专门的序列化框架来解决如hessian。 3hessian的序列化和反序列化 dubbo 默认使用的是该序列化方式将来可能会优化成性能更优的序列化方式如kryofst等。 hessian支持语言无关的序列化和反序列化并且速度更快序列化的结果更小如下 private void hessianSerialize() {Student stu new Student(hessian,1);byte[] obj serialize(stu);System.out.println(hessian serialize result length obj.length);byte[] obj2 serialize2(stu);System.out.println(hessian2 serialize result length obj2.length);byte[] other jdkSerialize(stu);System.out.println(jdk serialize result length other.length);Student student deserialize2(obj2);System.out.println(deserialize result entity is student); }具体看文章头源码。 运行结果如下 hessian serialize result length 65 hessian2 serialize result length 59 jdk serialize result length 101 deserialize result entity is Student(namehessian, age1)可以看到结果的大小jdk序列化hessian序列化hessian2序列化所以如果工作中有这种需求建议使用hessian2。 4arvo的序列化和反序列化 使用步骤如下 1:定义.avsc描述文件 2通过avro-tool.jar以.avsc描述文件作为输入生成pojo 3通过avro.jar的API进行序列化生成.avro文件和反序列化首先我们需要定义IDL命名为User.avsc: {namespace: dongshi.daddy.seriablize.avro,type: record,name: User,fields: [{name: name, type: string},{name: id, type: int},{name: salary, type: int},{name: age, type: int},{name: address, type: string}] }接着通过avro-tools.jar生成pojo如下 $ java -jar avro-tools-1.8.2.jar compile schema User.avsc res Input files to compile:User.avsc log4j:WARN No appenders could be found for logger (AvroVelocityLogChute). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.然后我们将生成的User.java文件拷贝到classpath的dongshi.daddy.seriablize.avro目录接着就可以执行序列化和反序列化了首先执行序列化 Test public void testAvroSerialize() throws Exception { // 声明并初始化User对象// 方式一User user1 new User();user1.setName(wqbin);user1.setId(1);user1.setSalary(1000);user1.setAge(20);user1.setAddress(beijing);// 方式二 使用构造函数 // Alternate constructorUser user2 new User(wang, 2, 1000, 19, guangzhou);// 方式三使用Build方式 // Construct via builderUser user3 User.newBuilder().setName(bin).setId(3).setAge(21).setSalary(2000).setAddress(shenzhen).build();String userDir System.getProperty(user.dir);System.out.println(userDir is: userDir);String path userDir /User.avro; // avro文件存放目录DatumWriterUser userDatumWriter new SpecificDatumWriterUser(User.class);DataFileWriterUser dataFileWriter new DataFileWriterUser(userDatumWriter);dataFileWriter.create(user1.getSchema(), new File(path)); // 把生成的user对象写入到avro文件dataFileWriter.append(user1);dataFileWriter.append(user2);dataFileWriter.append(user3);dataFileWriter.close(); }生成文件如下 接着执行反序列化 Test public void testAvroDeserialize() throws Exception {DatumReaderUser reader new SpecificDatumReaderUser(User.class);DataFileReaderUser dataFileReader new DataFileReaderUser(new File(System.getProperty(user.dir) /User.avro), reader);User user null;while (dataFileReader.hasNext()) {user dataFileReader.next();System.out.println(user);} }输出如下内容则为成功 {name: wqbin, id: 1, salary: 1000, age: 20, address: beijing} {name: wang, id: 2, salary: 1000, age: 19, address: guangzhou} {name: bin, id: 3, salary: 2000, age: 21, address: shenzhen}Process finished with exit code 05kryo的序列化和反序列化 kryo是底层使用了ASM字节码技术所以其只能使用在基于JVM的语言上如Javascalakotlin等接下来看下其如何使用。 首先引入pom dependencygroupIdcom.esotericsoftware/groupIdartifactIdkryo/artifactIdversion5.2.0/version /dependency序列化 Test public void testKrypSerialize() throws Exception {Kryo kryo new Kryo();kryo.register(SomeClass.class);SomeClass someClass new SomeClass();someClass.value dongshidaddy;Output output new Output(new FileOutputStream(userDir /someCls.bin));kryo.writeObject(output, someClass);output.close(); }运行后 反序列化 Test public void testKrypDeserialize() throws Exception {Kryo kryo new Kryo();kryo.register(SomeClass.class);Input input new Input(new FileInputStream(userDir /someCls.bin));SomeClass someClassFromBin kryo.readObject(input, SomeClass.class);System.out.println(someClassFromBin.value); }运行后 dongshidaddyProcess finished with exit code 06fst的序列化和反序列化 java的序列化和反序列化方式性能优秀jdk原生序列化速度的10倍序列化结果体积1/3左右如果有序列化的需求可以考虑使用。看下如何使用。 引入pom dependencygroupIdde.ruedigermoeller/groupIdartifactIdfst/artifactIdversion2.04/version /dependency序列化和反序列化 // fst序列化和反序列化 Test public void testFstSerializeAndDescrialize() {dongshi.daddy.seriablize.fst.User bean new dongshi.daddy.seriablize.fst.User();bean.setUsername(xxxxx);bean.setPassword(123456);bean.setAge(1000000);byte[] byteBean configuration.asByteArray(bean);System.out.println(序列化的字节大小是 byteBean.length);// 反序列化dongshi.daddy.seriablize.fst.User resultBean (dongshi.daddy.seriablize.fst.User) configuration.asObject(byteBean);System.out.println(fst反序列化的结果是 resultBean); }输出如下内容则为成功 序列化的字节大小是68 fst反序列化的结果是User(usernamexxxxx, age1000000, password123456)Process finished with exit code 0写在后面 巨人的肩膀 再来认识一下 Java 序列化 。 Hessian序列化实例 。 Avro从入门到入土 。 深入浅出序列化2——Kryo序列化 。 Kryo 和 FST 序列化 。
http://www.dnsts.com.cn/news/201341.html

相关文章:

  • 关于未备案网站推广普通话的广告语
  • 广东省发布最新消息seo岗位
  • 上海外贸网站推广服务建设信用卡网站换积分
  • 做二手房产网站多少钱华为公司网站建设受众是
  • 网站开发人员 平均工资如何免费自做企业网站
  • frontpage新建网站苏州姑苏区网站建设
  • 做外链音乐网站青岛网站建设方案服务
  • 做网站含营销中企动力企业邮箱app
  • 郑州企业建设网站有什么用百度代理查询系统
  • 惠安 网站建设公司wordpress作者列表
  • 做网站什么用百度淘宝网
  • 做一个公司的网站应做哪些准备工作内容推广平台有哪些技巧和方法
  • 电影网站开发源代码建筑工程网图
  • 建设鲜花网站前的市场分析网站建设说明书模板
  • html中文网站作业上海做什么赚钱快
  • 个人接外贸订单网站软件开发公司简介
  • 做旅游业务的商业网站越秀高端网站建设
  • 哈尔滨建设网站的免费咨询青岛做网站哪家强
  • 重庆网站建设大概多少费用做网站买域名多少钱
  • 网站 备案 名称如何做一名网站编辑
  • 软文台沈阳做网站优化哪家好
  • 大连网站建设开发wordpress 免登录发布
  • 龙岗商城网站建设精灵网站建设
  • 建立企业网站的形式网络平台怎么弄
  • 飞机查询网站开发的创新点seo优化包括什么
  • 哪些网站做的好看的图片程序外包接单
  • 网站连接怎么做dz论坛如何做网站地图
  • 建站平台取名字网页微信版可以加入腾讯会议吗
  • 建设工程施工合同网站电脑软件和网站怎么做
  • 强大的网站设计制作wordpress添加熊掌号