序列化

对象内有多个对象型的成员变量怎么实现深克隆

人走茶凉 提交于 2020-02-22 12:15:17
浅克隆和深克隆 在Java语言中,数据类型分为值类型(基本数据类型)和引用类型,值类型包括int、double、byte、boolean、char等简单数据类型,引用类型包括类、接口、数组等复杂类型。浅克隆和深克隆的主要区别在于是否支持引用类型的成员变量的复制。 1、浅克隆 在浅克隆中,如果原型对象的成员变量是值类型,将复制一份给克隆对象;如果原型对象的成员变量是引用类型,则将引用对象的地址复制一份给克隆对象,也就是说原型对象和克隆对象的成员变量指向相同的内存地址。 简单来说,在浅克隆中,当对象被复制时只复制它本身和其中包含的值类型的成员变量,而引用类型的成员对象并没有复制。 在Java语言中,通过 覆盖Object类的clone()方法可以实现浅克隆 。 浅克隆的实现: 1. 被复制的类需要实现Clonenable接口 (不实现的话在调用clone方法会抛出CloneNotSupportedException异常), 该接口为标记接口(不含任何方法) 2. 覆盖clone()方法,访问修饰符设为public 。 方法中调用super.clone()方法得到需要的复制对象 。(native为本地方法) class Student implements Cloneable{ private int number; public int getNumber() { return

Java实体对象为什么要实现Serializable接口?

久未见 提交于 2020-02-22 11:48:38
前言 Java实体对象为什么一定要实现Serializable接口呢?在学JavaSE的时候有些实体对象不实现Serializable不是也没什么影响吗? 最近在学习mybatis的时候发现,老师写的实体对象都实现了Serializable接口,我查了查网上说是实现Serilizable接口是为了序列化 先来看下Serializable接口 Serializable是java.io包中定义的、用于实现Java类的序列化操作而提供的一个语义级别的接口。Serializable序列化接口没有任何方法或者字段,只是用于标识可序列化的语义。实现了Serializable接口的类可以被ObjectOutputStream转换为字节流,同时也可以通过ObjectInputStream再将其解析为对象。例如,我们可以将序列化对象写入文件后,再次从文件中读取它并反序列化成对象,也就是说,可以使用表示对象及其数据的类型信息和字节在内存中重新创建对象。而Java作为一门面向对象的编程语言,对象作为其主要数据的类型载体,为了完成对象数据的读写操作,也就需要一种方式来让JVM知道在进行IO操作时如何将对象数据转换为字节流,以及如何将字节流数据转换为特定的对象,而Serializable接口就承担了这样一个角色。 实现序列化的两个原因 1、将对象的状态保存在存储媒体中以便可以在以后重新创建出完全相同的副本

Laravel v5.8 反序列化rce (CVE-2019-9081) 复现

与世无争的帅哥 提交于 2020-02-22 04:52:11
序 Laravel是一款比较流行的优秀php开发框架,本身也比较重,通过这个框架来接触大型框架的代码审计、包括锻炼反序列化漏洞的挖掘利用是比较合适的。在学习了几天Laravel开发以后,我尝试复现了一下CVE-2019-9081,整体过程和原作者还是有些区别的,原作者思维比较跳跃的地方,我按自己的思维尝试摸索,有错误之处欢迎斧正。 环境搭建 使用composer+PhpStorm+xampp的方式配置laravel 首先下载composer,安装完成之后配置国内镜像源 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 使用PhpStorm直接在 xampp/htdocs 下创建composer项目 访问 public 目录出现如下界面表示Laravel配置成功 接下来创建控制器 php artisan make:controller DemoController 配置路由 Route::get('/demo', '\App\Http\Controllers\DemoController@demo'); 控制器 class DemoController extends Controller { public function demo() { if (isset($_GET[

在反序列化数据的时候报错raise JSONDecodeError(\"Expecting value\", s, err.value) from None json.decode

て烟熏妆下的殇ゞ 提交于 2020-02-21 18:41:04
今天在爬取某网站数据内容适合,通过正则匹配拿到了需要的内容字符串,但是在反序列化的时候竟然报错,大概意思知道他不是json的期望值,那么我就会像是不是数据内有一些内容是由于编码的问题导致的呢?因为之前爬一些内容时候在打印一些爬到的东西这些内容是打印不出来的,因为python中的打印好像用的是gbk默认,而且修改不了好像,虽然在头部设置了utf8,但是只是当前程序的编码解码utf8,打印仍然是gbk。后来一想,不对啊,这里的内容我是打印出来了的。而且在一些网站上做json校验的时候是没有问题的,从网上查询了好多,但是帮助不大,由于字符串长度太长了,最后实在憋得没办法了,那么我就一段一段的内容复制过来做验证吧,花了好长时间一点一点的使,到最后都可以被json.loads、、、、后来想拿我就反着来吧,删除了;号,竟然好了,最终明白,确实不是json的期望值,其中;是一个,还有一个尾部的空白行也是不行,中间尝试的时候我尝试把;replace成'',都不行,那会是直接从页面获取的数据不是粘贴过来的,应该是默认带了空白行或者是换行符了,所以需要把这些也去一下。 简洁一点:字符串不符合反序列化的要求,非法内容存在。 来源: https://www.cnblogs.com/blackball9/p/12342162.html

Alamofire网络库基础教程

怎甘沉沦 提交于 2020-02-21 06:31:42
原文 Beginning Alamofire Tutorial 原文作者 Essan Parto 译者 星夜暮晨 (QQ:412027805) http://www.jianshu.com/p/f1208b5e42d9 CocoaChina 对应地址: http://www.cocoachina.com/ios/20141202/10390.html 2014年12月1日 2015年4月15日,更新至Xcode6.3及Swift1.2 感谢 nevermosby 对本文的遗漏之处进行指正,同时也感谢 SwiftLanguage 的推荐 学习如何使用 Alamofire 来轻松地实现 Swift 的网络请求处理 AFNetworking 是 iOS 和 OS X 上最受欢迎的第三方库之一。它曾在我们的2012年的读者评选中荣获 2012年度最佳 iOS 库 称号。它同样也在 Github 上面获得了14000多个 stars 和4000多个 forks,是使用最广的开源项目之一。 最近,AFNetworking 的作者 Mattt Thompson 提交了一个新的类似于 AFNetworking 的网络 基础库,并且是专门使用最新的 Swift 语言来编写的,名为: Alamofire 。 AFNetwork 的前缀 AF 是 Alamofire 的缩写,因此这个新的库名称其实是根据

Alamofire 的使用

笑着哭i 提交于 2020-02-21 05:43:11
最近,AFNetworking 的作者 Mattt Thompson 提交了一个新的类似于 AFNetworking 的网络 基础库,并且是专门使用最新的 Swift 语言来编写的,名为: Alamofire AFNetwork 的前缀 AF 是 Alamofire 的缩写,因此这个新的库名称其实是根据 Swift 的约定来进行命名的。 在本教程的第一部分中,我们将带领大家使用 Alamofire 来制作一个图片库应用,其来源是 500px.com 。在这个过程中,您可以学习到如何使用 Alamofire 中的重要组件,以及了解在应用中处理网络请求的某些重要的知识点。 本教程的第二部分将基于第一部分所制作的应用,并为其增加一些好用的功能。您可以通过这个过程学习到更多高级的 Alamofire 用法。 本教程假定您已熟悉 Swift 语言以及 iOS 开发。如果不是的话,请参阅我们的 其他教程 。还有,本教程使用 Xcode 6.1 作为开发环境(而不是 Xcode 6.2 beta)。 > 提示: 如果您已经熟悉了 Alamofire 的基本用法,那么您可以直接跳到本文的 第二部分 。但是请确保您已拥有消费者密钥(cunsumer key),然后参照下文在应用中替换它。 让我们开始吧 首先下载本次教程的 初始项目 。这个项目中提供了在本教程中需要的全部 UI

python对象序列化之pickle

自作多情 提交于 2020-02-20 11:56:34
本片文章主要是对 pickle官网 的阅读记录。 The pickle module implements binary protocols for serializing and de-serializing a Python object structure. “Pickling” is the process whereby a Python object hierarchy is converted into a byte stream, and “unpickling” is the inverse operation, whereby a byte stream (from a binary file or bytes-like object ) is converted back into an object hierarchy. Pickling (and unpickling) is alternatively known as “serialization”, “marshalling,” [1] or “flattening”; however, to avoid confusion, the terms used here are “pickling” and “unpickling”. pickle是python标准模块之一,不需要再额外安装。

c# 通过json.net中的JsonConverter进行自定义序列化与反序列化

只谈情不闲聊 提交于 2020-02-20 11:45:25
https://www.cnblogs.com/yijiayi/p/10051284.html 相信大家在工作中会经常遇见对json进行序列化与反序列化吧,但通常的序列化与反序列化中的json结构与c#中的类模型结构是相对应的,我们是否可以在序列化一个对象时候,让我们json的数据结构能按照自己的意愿,而不必与该对象的数据结构一样呢?,比如说,一个对象,只有一个名为"ID"的int类型的属性,值为1,如果序列化该对象,则能得到json:{"ID":1},但我现在希望得到的json的"ID"值是bool类型:{"ID":true}。要满足能够进行自定义序列化与反序列化的要求,我们可以运用json.net中的转换器JsonConverter。   先来个简单的例子,就上面那个,一个对象,只有一个名为"ID"的int类型的属性,值为1,序列化该对象,如果ID值为1,则能得到json:{"ID":true},如果ID值不为1,得到json{"ID":false}。   定义类: public class Model { public int ID { get; set; } }   NuGet添加引用Newtonsoft.Json,再定义一个转换器类MyConverter,这个类要继承Newtonsoft.Json命名空间下的一个抽象类JsonConverter

二进制数据的序列化反序列化和Json的序列化反序列化的重要区别

爷,独闯天下 提交于 2020-02-20 11:45:11
  前言:最近一个一个很奇怪的问题,很明白的说,就是没看懂,参照下面的代码: /// <summary> /// 反序列化对象 /// </summary> /// <typeparam name="T">指定对象类型</typeparam> /// <param name="data">字节数组</param> /// <param name="isClearData">压缩完成后,是否清除待压缩字节数组里面的内容</param> /// <returns>指定类型的对象</returns> public static T DeserializeByBytes<T>(byte[] data, bool isClearData = true) { T t = default(T); if (data == null) return t; try { BinaryFormatter formatter = new BinaryFormatter(); using (MemoryStream ms = new MemoryStream(data)) { t = (T)formatter.Deserialize(ms); } formatter = null; if (isClearData) Array.Clear(data, 0, data.Length); } catch

Python开发之序列化与反序列化:pickle、json模块使用详解

白昼怎懂夜的黑 提交于 2020-02-20 11:44:43
1 引言   在日常开发中,所有的对象都是存储在内存当中,尤其是像python这样的坚持一切接对象的高级程序设计语言,一旦关机,在写在内存中的数据都将不复存在。另一方面,存储在内存够中的对象由于编程语言、网络环境等等因素,很难在网络中进行传输交互。由此,就诞生了一种机制,可以实现内存中的对象与方便持久化在磁盘中或在网络中进行交互的数据格式(str、bites)之间的相互转换。这种机制就叫序列化与发序列化:    序列化:将内存中的不可持久化和传输对象转换为可方便持久化和传输对象的过程。    反序列化:将可持久化和传输对象转换为不可持久化和传输对象的过程。   Python中提供pickle和json两个模块来实现序列化与反序列化,pickle模块和json模块dumps()、dump()、loads()、load()这是个函数,其中dumps()、dump()用于实现序列化,loads()、load()用于实现反序列化。下面,我们分别对pickle和json模块进行介绍。 2 pickle模块   pickle模块的dumps()、dump()、loads()、load()是个函数按功能划分可以分为两组:   序列化:dumps()、dump()   反序列化:loads()、load()    dumps()与dump()的区别是dumps()只是单纯得将对象序列化,而dump