全面的聊城网站建设,运营公开网是什么网站,互联网门户网站建设,海南舰最新动态迈出关键一步引言
我们在做项目中涉及到各种数据类的处理#xff0c;很多很杂乱。难免一个人的知识点有盲点#xff0c;所以想着做个整理。 定义
在平时的使用中#xff0c;我们会用到一些类来保持一些数据或状态#xff0c;我们习惯上成为bean或者entity#xff0c;也有的定义为mod…引言
我们在做项目中涉及到各种数据类的处理很多很杂乱。难免一个人的知识点有盲点所以想着做个整理。 定义
在平时的使用中我们会用到一些类来保持一些数据或状态我们习惯上成为bean或者entity也有的定义为model。
kotlin中有专门处理这一种类的关键字data。
data class MyData(var name :String , var age : Int )
这种由data修饰的类叫做数据类编译器自动从在主构造函数定义的全部特性中得到以下成员
equals()/hashCode()toString() 格式是 MyData(namewudi, age20)componentN() 方法对应按声明顺序出现的所有属性copy() 方法 特点
类由关键字data修饰好像是废话类的构造参数必须由var/val修饰否则编译不通过编译器会自动生成一些常用方法你可以自定义它们和普通类一样如果你需要一个无参构造方法可以将构造方法的参数都设置默认值 使用场景 默认值
如果我们构造函数需要默认值情况:
data class HomeInfoList(val curPage: Int 0,val offset: Int 0,val pageCount: Int 0,val size: Int 0,val total: Int 0,val over: Boolean false,val datas: MutableListHomeInfo? mutableListOf()
) 序列化、反序列化
一、概念
序列化把对象转化为可传输的字节序列过程称为序列化。
反序列化把字节序列还原为对象的过程称为反序列化。
序列化 (Serialization) 是将对象的状态信息转换为可以存储或传输的形式的过程。
在序列化期间对象将其当前状态写入到临时或持久性存储区。以后可以通过从存储区中读取或反序列化对象的状态重新创建该对象。
二、序列化的目的
以某种存储形式使自定义对象持久化。对象随着程序的运行而被创建然后在不可达时被回收生命周期是短暂的。但是如果我们想长久地把对象的内容保存起来怎么办呢把它转化为字节序列保存在存储介质上即可。那就需要序列化。
将对象从一个地方传递到另一个地方网络传输。所有可在网络上传输的对象都必须是可序列化的比如RMIremote method invoke即远程方法调用传入的参数或返回的对象都是可序列化的否则会出错所有需要保存到磁盘的java对象都必须是可序列化的。
进程间传递对象。Android是基于Linux系统不同进程之间的 java 对象是无法传输所以我们此处要对对象进行序列化从而实现对象在应用程序进程和ActivityManagerService进程之间传输。
简单说
其实序列化最终的目的是为了对象可以跨平台存储和进行网络传输。
而我们进行跨平台存储和网络传输的方式就是IO而IO支持的数据格式就是字节数组。
因为我们单方面的只把对象转成字节数组还不行因为没有规则的字节数组我们是没办法把对象的本来面目还原回来的所以我们必须在把对象转成字节数组的时候就制定一种规则序列化那么我们从IO流里面读出数据的时候再以这种规则把对象还原回来反序列化。
例如如果我们要把一栋房子从一个地方运输到另一个地方去序列化就是我把房子拆成一个个的砖块放到车子里然后留下一张房子原来结构的图纸反序列化就是我们把房子运输到了目的地以后根据图纸把一块块砖头还原成房子原来面目的过程。
三、什么时候需要序列化
凡是需要进行“跨平台存储”和”网络传输”的数据都需要进行序列化。
本质上 存储和网络传输 都需要经过 把一个对象状态保存成一种跨平台识别的字节格式然后其他的平台才可以通过字节信息解析还原对象信息。