序列化

java.io.Serializable中serialVersionUID的作用

99封情书 提交于 2020-03-10 00:24:47
把对象转换为字节序列的过程称为对象的序列化。   把字节序列恢复为对象的过程称为对象的反序列化。   对象的序列化主要有两种用途:   1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;   2) 在网络上传送对象的字节序列。   在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存。比如最常见的是Web服务器中的Session对象,当有 10万用户并发访问,就有可能出现10万个Session对象,内存可能吃不消,于是Web容器就会把一些seesion先序列化到硬盘中,等要用了,再把保存在硬盘中的对象还原到内存中。   当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象 serialVersionUID是根据会根据类信息动态生成serialVersionUID,序列化和反序列化都会根据这个类。如果在序列化之后对象存入到本地磁盘,而实体又修改了字段,这时候再去反序列化磁盘上的对象会失败,因为根据类信息生成serialVersionUID和序列化时生成的serialVersionUID不一样了,反序列化时找不到这个类了,会抛出InvalidClassExceptions

Java序列化流-ObjectOutputStream、ObjectInputStream

别等时光非礼了梦想. 提交于 2020-03-09 20:21:20
Java对象流的基本概念: 实例代码: 实体类User: 1 import java.io.Serializable; 2 3 /** 4 * @author zsh 5 * @company wlgzs 6 * @create 2019-01-25 15:11 7 * @Describe 8 */ 9 public class User implements Serializable { 10 11 private Integer id; 12 13 private String name; 14 15 public User(Integer id, String name) { 16 this.id = id; 17 this.name = name; 18 } 19 20 @Override 21 public String toString() { 22 return "User{" + 23 "id=" + id + 24 ", name='" + name + '\'' + 25 '}'; 26 } 27 } Main类: 1 import java.io.*; 2 import java.util.ArrayList; 3 4 public class Main { 5 6 public static void main(String[] args) throws

java IO笔记(序列化与ObjectInputStream、ObjectOutputStream)

烈酒焚心 提交于 2020-03-09 19:40:41
本篇讲的内容是序列化,以及ObjectInputStream和ObjectOutputStream流。 我们知道java是基于对象编程的,我们前面在进行流传输数据时,要么是以字节传输,要么是以字符传输,如果能在流中传输对象岂不是更为方便,幸运的是java在这个方面提供了支持,序列化和反序列技术帮我我们实现了该功能。 序列化指的是将对象转换为字节序列,而反序列化就是将字节序列转换为对象了,java io中的ObjectInputStream中的readObject()方法对应着反序列化 ,ObjuectOutputStream中的writeObjext(Object object)对应着序列化,当然所序列化的对象object必须是可被序列化的。 序列化反序列化一般的应用场景分为两种,一种是将信息写入硬盘之中需要用的时候再从硬盘中还原,这样可以节省很多的操作空间,如web中的session,当并发数量很高时,可能会将一些存储到硬盘中,等需要时再还原。 那么如何能让对象可以被序列化呢,其实很简单,那就是该对象必须实现java.io.Serializable接口或者java.io.Externlizabel接口,其中Externlizable接口继承了Serializable接口。如果采用默认的序列化方式实现Serializable接口就行了,如果想自己控制序列化

2 APIView与序列化组件

假装没事ソ 提交于 2020-03-09 19:00:44
1、入门 1.1 参考blog 官方文档: http://www.django-rest-framework.org/tutorial/quickstart/#quickstart yuan的Blog: http://www.cnblogs.com/yuanchenqi/articles/8719520.html alice的Blog: https://www.cnblogs.com/alice-bj/p/9228402.html 1.2 restful协议 restful协议 ---- 一切皆是资源,操作只是请求方式 ----book表增删改查 /books/ books /books/add/ addbook /books/(\d+)/change/ changebook /books/(\d+)/delete/ delbook----book表增删改查 url里面不能出现动词!! /books/ -----get books ----- 返回当前所有数据 /books/ -----post books ----- 返回提交数据 /books/(\d+)-----get bookdetail ----- 返回当前查看的单条数据 /books/(\d+)-----put bookdetail ----- 返回更新数据 /books/(\d+)-----delete

(五) rest_framework 序列化与源码实现

落爺英雄遲暮 提交于 2020-03-09 17:33:10
Serializer 类 指定序列化需要返回的 field,source为指定数据库字段,可以通过 ‘. ’ 获取外键关联对象。 get_xxx_display 获取CharField choices 对应的值 SerializerMethodField:自定义方法,执行实例化对象的 get_obj() 方法 每个field对象触发的to_representation方法 。 class AccountSerializers(serializers.Serializer): name = serializers.CharField(source='username') status = serializers.CharField(source='get_status_display') #拿到choice gender = serializers.CharField(source='get_gender_display') gp = serializers.CharField(source='group.group_name') user_roles = serializers.SerializerMethodField() gender_toast = serializers.SerializerMethodField() def get_gender_toast(self,

spark的性能优化

倾然丶 夕夏残阳落幕 提交于 2020-03-09 13:13:05
spark性能优化点 一、分配更多的资源 它是性能优化调优的王道,就是增加和分配更多的资源,这对于性能和速度上的提升是显而易见的, 基本上,在一定范围之内,增加资源与性能的提升,是成正比的;写完了一个复杂的spark作业之后,进行性能调 优的时候,首先第一步,就是要来调节优的资源配置;在这个基础之上,如果说你的spark作业,能够分配的资源达到 了你的能力范围的顶端之后,无法再分配更多的资源了,公司资源有限;那么才是考虑去做后面的这些性能调优的点。 1、分配哪些资源 executor-memory、executor-cores、driver-memory 2、在哪里设置 在实际的生产环境中,提交spark任务时,使用spark‐submit shell脚本,在里面调整对应的参数。 提交任务的脚本: spark‐submit \ ‐‐master spark://node1:7077 \ ‐‐class cn.itcast.WordCount \ ‐‐num‐executors 3 \ 配置executor的数量 ‐‐driver‐memory 1g \ 配置driver的内存(影响不大) ‐‐executor‐memory 1g \ 配置每一个executor的内存大小 ‐‐executor‐cores 3 \ 配置每一个executor的cpu个数 /export/servers

Jackson序列化实例

佐手、 提交于 2020-03-09 09:04:15
参考文章 Jackson使用ContextualSerializer在序列化时获取字段注解的属性 使用BeanSerializerModifier定制jackson的自定义序列化(null值的处理) 关于使用ContextualSerializer的补充       BeanSerializerFactory中有如下代码,       关于设置SerializerModifier,如下        两种实现序列化的方式   方式1:自定义json serialize 实现ContextualSerializer接口   1. bo中自定义@ReferSerialTransfer注解      2. 自定义注解 ReferSerialTransfer.java      3. 自定义 json serialize实现      4. springmvc 配置文件中 converter的配置 <mvc:annotation-driven> <mvc:message-converters register-defaults="true"> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <constructor-arg value="UTF-8" /> <property name

Jackson自定义反序列化

旧巷老猫 提交于 2020-03-09 08:44:21
// 设置jackson时间反系列化格式 SimpleModule module = new SimpleModule(); module.addDeserializer(Date.class, new DateDeserializer()); this.registerModule(module); 时间反序列化 public class DateDeserializer extends JsonDeserializer<Date> { private static final List<String> formarts = new ArrayList<String>(4); static{ formarts.add("yyyy-MM"); formarts.add("yyyy-MM-dd"); formarts.add("yyyy-MM-dd hh:mm"); formarts.add("yyyy-MM-dd hh:mm:ss"); } @Override public Date deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException { String source = p.getText().trim(); if ("".equals

jackson序列化和反序列化Json

依然范特西╮ 提交于 2020-03-09 08:44:01
jackson包提供了java对象与json相互转换的API。 jackson转换机制 Jackson要求java对象是一个POJO对象,即它是一个普通JavaBean对象。此外,如果字段是用private修饰的,则必须有getXXX()方法,否则字段用public修饰。 json常见格式如下 { "key1" : value, "key2" : [...], "key3" : {...} } jackson把JavaBean对象的每个字段映射为json的键,json键值由JavaBean的getXXX()方法确定。 json键值从形式上看,可以分为基本类型(字符串、数值)、数组、字典。当JavaBean的字段声明为基本类型时对应json的基本类型,当JavaBean声明为数组或链表时对应json的数组类型,当JavaBean声明为字典或对象时对应json的字典类型。 序列化 定义一个符合JavaBean规则的类 package com.weixia.Json; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; public class Bean { private String name; private int[] stature; private Friend friend;

Google ProtocolBuffer

☆樱花仙子☆ 提交于 2020-03-09 08:43:33
https://www.ibm.com/developerworks/cn/linux/l-cn-gpb/index.html 1. Protocol Buffers 简介    Protocol Buffers (ProtocolBuffer/ protobuf )是Google公司开发的一种数据描述语言,类似于XML能够将结构化数据序列化,可以使用该技术来持久化数据或者序列化成网络传输的数据。主要用于数据存储、通信协议等方面。现阶段支持C++、JAVA、Python、Objective-C、C#、Javascript等6种编程语言。Googel 公司 2015-12-31 更新了最新的版本Version 3.0.0-beta-2,相比较一些其他的XML技术而言,该技术的一个明显特点就是更加节省空间(以二进制流存储)、速度更快以及更加灵活 同XML相比,Protocol buffers在序列化结构化数据方面有许多优点(google官方提出): 更简单 数据描述文件只需原来的1/10至1/3 解析速度是原来的20倍至100倍 减少了二义性 生 成了更容易在编程中使用的数据访问类 来源: https://www.cnblogs.com/dadadechengzi/p/10035169.html