序列化

2020年学习Java必需掌握的4大基础!

℡╲_俬逩灬. 提交于 2020-02-20 11:36:01
大概每个人在学生时代开始就使用Java了,我们一直在学习Java,但Java中总有一些概念含混不清,不论是对初级还是高级程序员都是如此。所以,这篇文章的目的就是弄清楚这些概念。 读完本文你会对这些概念有更深入的了解,还能弄清楚一切灰色的东西。在本书中,我们将讨论匿名内联类、多线程、同步和序列化。 1. 匿名类 Java匿名类很像局部类或内联类,只是没有名字。我们可以利用匿名类,同时定义并实例化一个类。只有局部类仅被使用一次时才应该这么做。 匿名类不能有显式定义的构造函数。相反,每个匿名类都隐含地定义了一个匿名构造函数。 创建匿名类有两种方法: 扩展已有的类(可以是抽象类,也可以是具体类) 创建接口 理解代码的最好方法就是先阅读,所以我们首先来看看代码。 interface Football { void kick(); } class AnnonymousClass { public static Footballfootball = new Football() { @Override public void kick() { System.out.println("Nested Anonymous Class."); } }; public static void main(String[] args) { // anomynous class inside the

java类中serialVersionUID的作用

心已入冬 提交于 2020-02-20 08:15:27
实现Serializable接口的目的是为类可持久化,比如在网络传输或本地存储,为系统的分布和异构部署提供先决条件。若没有序列化,现在我们所熟悉的远程调用,对象数据库都不可能存在, serialVersionUID适用于java序列化机制。简单来说,JAVA序列化的机制是通过判断类的serialVersionUID来验证的版本一致的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID于本地相应实体类的serialVersionUID进行比较。如果相同说明是一致的,可以进行反序列化,否则会出现反序列化版本一致的异常,即是InvalidCastException。 具体序列化的过程是这样的: 序列化操作时会把系统当前类的serialVersionUID写入到序列化文件中,当反序列化时系统会自动检测文件中的serialVersionUID,判断它是否与当前类中的serialVersionUID一致。如果一致说明序列化文件的版本与当前类的版本是一样的,可以反序列化成功,否则就失败; serialVersionUID有两种显示的生成方式: 一是默认的1L,比如:private static final long serialVersionUID = 1L; 二是根据包名,类名,继承关系,非私有的方法和属性,以及参数,返回值等诸多因子计算得出的

Xml序列化

生来就可爱ヽ(ⅴ<●) 提交于 2020-02-20 07:13:43
  XML序列化是将对象的公共属性和字段转换为XML格式,以便存储或传输的过程。反序列化则是从XML输出中重新创建原始状态的对象。XML序列化中最主要的类是XmlSerializer类。它的最重要的方法是Serialize和Deserialize方法,它位于System.Xml.Serialization命名空间。 一、XML序列化基本要点   在本节开始之前,首先来看一个最简单的示例: namespace 学习测试 { class Program { static void Main(string[] args) { Person p = new Person(1, "刘备", 176); string xmlString = ""; //xml序列化开始 using (MemoryStream ms = new MemoryStream()) { Type t = p.GetType(); XmlSerializer xml = new XmlSerializer(t); xml.Serialize(ms, p); byte[] arr = ms.ToArray(); xmlString = Encoding.UTF8.GetString(arr, 0, arr.Length); ms.Close(); } Console.WriteLine(xmlString);

Java的四个标记接口:Serializable、Cloneable、RandomAccess和Remote接口

社会主义新天地 提交于 2020-02-19 22:43:34
一、概述 标记接口是一些没有属性和方法的接口,也是一种设计思想。Java中的一个标记接口表示的的是一种类的特性,实现了该标记接口的类则具有该特性。如实现了Serializable接口的类,表示这个类的对象是可以进行序列化和反序列化的。Java中常见的标记接口还有Cloneable接口、RandomAccess接口和Remote接口。可以用 if(对象名 instanceof 标记接口名)检测一个类是否实现某个标记接口。 二、四个标记接口的浅析 1、java.io.Serializable标记接口 该接口用来标记类的对象是否能够可以进行序列化,或者说串行化。将对象序列化之后,可以进行持久化的储存以及在网络中进行传输。如把对象变成字节流写入到一个文件中,就是一个序列化的过程,实现了对象的持久化储存,然后你的程序可以从这个文件中读取序列化的对象并且把它还原成原来的对象,进行反序列化。如果进行序列化的类的对象没有实现Serializable接口,则会抛出NotSerializableException。 1)对象序列化有哪些特点? 在对象序列化时,该对象引用的实例变量也会被序列化,如果这个实例变量是一个对象,这个对象也会被序列化。被transient修饰的实例变量也不参与序列化。在对象反序列化时transient修饰的变量将重新初始化,对象初始为null,基本数据类型被初始化为0

Java 序列化与反序列化

强颜欢笑 提交于 2020-02-19 04:18:20
import org.junit.Test; import java.io.*; public class SerializableTest implements Serializable { class Student implements Serializable { private String name; private String gender; private String address; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "Student{" + "name='" + name + '\

day20 python常用模块

感情迁移 提交于 2020-02-18 23:39:30
认识模块     什么是模块?      常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。      但其实import加载的模块分为四个通用类别:        1 使用python编写的代码(.py文件)       2 已被编译为共享库或DLL的C或C++扩展       3 包好一组模块的包       4 使用C编写并链接到python解释器的内置模块    为何要使用模块?      如果你退出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常将程序写到文件中以便永久保存下来,需要时就通过python test.py方式去执行,此时test.py被称为脚本script。     随着程序的发展,功能越来越多,为了方便管理,我们通常将程序分成一个个的文件,这样做程序的结构更清晰,方便管理。      这时我们不仅仅可以把这些文件当做脚本去执行,还可以把他们当做模块来导入到其他的模块中,实现了功能的重复利用, 常用模块  1. collections模块     在内置数据类型(dict, list, set, tuple) 的基础上, collections 模块还提供了几个额外的数据类型:namedtuple, deque, OrderedDict, defaultdict,

Day16 常用内置模块(一)

我与影子孤独终老i 提交于 2020-02-18 23:38:23
1.collections模块    Python有一些内置的数据类型,如:整型、浮点型、字符串、列表、元组、字典、集合、布尔值,除了这些之外,collections模块还提供了几个额外的数据类型:Counter、deque、defaultdict、namedtuple、OrderedDict等 (1)namedtuple具名元组 生成可以使用名字来访问元素内容的tuple,简单的来说就是生成有具体名字的元组 可以表示一个坐标、扑克牌等 1 # namedtuple具名元组 2 # 如想表示一个坐标p = (1,2) 3 point = namedtuple('坐标',['x','y']) 4 p = point(1,2) 5 print(p) 6 print(p.x) 7 # 表示一个三维坐标 8 point = namedtuple('坐标','x y z') # 也可以用字符串来表示,但是各字符之间要空格隔开 9 p = point(1,2,3) # 元素数量必须跟字符数量一致 10 print(p) 11 print(p.z) 12 # 表示扑克牌 13 card = namedtuple('扑克牌','花色 大小') 14 c = card('♤','2') 15 print(c) 16 print(c.花色) (2)deque双端队列 可以从左右两侧追加和推出对象

常用模块

天大地大妈咪最大 提交于 2020-02-18 23:37:52
阅读目录 认识模块 什么是模块 模块的导入和使用 常用模块一 collections模块 时间模块 random模块 os模块 sys模块 序列化模块 re模块 常用模块二 hashlib模块 configparse模块 logging模块 认识模块    返回顶部 什么是模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。 但其实import加载的模块分为四个通用类别:    1 使用python编写的代码(.py文件)   2 已被编译为共享库或DLL的C或C++扩展   3 包好一组模块的包   4 使用C编写并链接到python解释器的内置模块 为何要使用模块? 如果你退出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常将程序写到文件中以便永久保存下来,需要时就通过python test.py方式去执行,此时test.py被称为脚本script。 随着程序的发展,功能越来越多,为了方便管理,我们通常将程序分成一个个的文件,这样做程序的结构更清晰,方便管理。这时我们不仅仅可以把这些文件当做脚本去执行,还可以把他们当做模块来导入到其他的模块中,实现了功能的重复利用, 返回顶部 模块的导入和使用 模块的导入应该在程序开始的地方 更多相关内容 https://www.cnblogs

DRF(Django Rest Framework)序列化组件接口使用和接口设计--!GET接口设计!

旧巷老猫 提交于 2020-02-17 19:08:13
定义序列化器(本质就是一个类),一般包括模型类的字段,有自己的字段类型规则。实现了序列化器后,就可以创建序列化对象以及查询集进行序列化操作,通过序列化对象.data来获取数据(不用自己构造字典,再返回Json数据) INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'apps.apps.AppsConfig', 'app01', 'rest_framework', #把drf组件注册进去 ] 项目主目录/settings.py from django.db import models # Create your models here. class Book(models.Model): nid = models.IntegerField(primary_key=True) title = models.CharField(max_length=32) #第三张表 author = models.ManyToManyField(to='Author') class

c# xml 序列化

百般思念 提交于 2020-02-17 05:21:25
ref http://blog.csdn.net/diligentcat/article/details/6854468 类属性中的list参数序列化方法 http://hi.baidu.com/jackeyrain/item/79ad923564fa94f1e6bb7a11 文件操作方法 弄了半天,查了很多资料,原来是类中没有含有参数为空的构造函数造成。如果要根据xmlserializer来把对象序列化成XML,必须至少有一个参数为空的构造函数,否则就会报该类型错误。 2、 http://blog.csdn.net/diligentcat/article/details/6854468 中对list的序列化方法是错误的 使用XmlWriter写Xml http://www.cnblogs.com/yukaizhao/archive/2011/07/20/xmlwriter-write-xml.html 使用XmlReader读取xml文件 http://zhoufoxcn.blog.51cto.com/792419/163926 来源: https://www.cnblogs.com/carl2380/archive/2013/06/16/3138942.html