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

局域网网站架设软件文档下载免费网站

局域网网站架设软件,文档下载免费网站,互联网有哪些岗位,网站建设制作免费推广序列化与反序列化 序列化是将对象转换为可以存储或传输的格式的过程。在计算机科学中#xff0c;对象通常是指内存中的数据结构#xff0c;如数组、列表、字典等。通过序列化#xff0c;可以将这些对象转换为字节流或文本格式#xff0c;以便在不同的系统之间进行传输或存… 序列化与反序列化 序列化是将对象转换为可以存储或传输的格式的过程。在计算机科学中对象通常是指内存中的数据结构如数组、列表、字典等。通过序列化可以将这些对象转换为字节流或文本格式以便在不同的系统之间进行传输或存储。序列化后的数据可以被传输到远程系统或者存储在磁盘上以便在需要时进行读取和恢复。序列化的逆过程称为反序列化即将序列化后的数据重新转换为原始对象的过程。 反序列化是将序列化后的数据恢复为原始对象的过程。在编程中我们经常需要将对象序列化为字节流或者其他形式的数据以便在网络传输或者持久化存储中使用。而反序列化则是将这些序列化后的数据重新转换为原始对象。 在不同的编程语言中反序列化的实现方式可能会有所不同。一般来说反序列化的过程包括以下几个步骤 读取序列化后的数据从文件、网络传输等地方读取序列化后的数据。解析数据根据序列化的格式解析数据并还原为原始的对象结构。创建对象根据解析得到的数据创建对应的对象实例。恢复对象状态将解析得到的数据赋值给对象的属性恢复对象的状态。 反序列化的过程可以用以下伪代码表示 data 读取序列化后的数据 object 解析数据(data)在实际应用中反序列化的方式和具体实现会根据编程语言和序列化库的不同而有所差异。不同的序列化格式有不同的特点和适用场景开发者可以根据具体需求选择合适的序列化方式。 Android数据对象序列化的用途 Android数据对象序列化的主要用途是将对象转换为字节流的形式以便在网络传输、持久化存储或进程间通信中使用。具体的用途包括 网络传输在Android开发中我们经常需要将对象通过网络传输给其他设备或服务器。通过序列化我们可以将对象转换为字节流然后通过网络发送给目标设备或服务器目标设备或服务器再将字节流反序列化为对象进行处理。 持久化存储Android应用程序通常需要将数据保存在本地存储中以便在应用程序关闭后仍然可以访问。通过序列化我们可以将对象转换为字节流并将其保存在本地文件或数据库中。当应用程序再次启动时我们可以将字节流反序列化为对象以便恢复之前保存的数据。 进程间通信在Android中不同的组件如Activity、Service、BroadcastReceiver等可能运行在不同的进程中。通过序列化我们可以将对象转换为字节流并通过进程间通信机制如Binder将字节流传递给其他进程其他进程再将字节流反序列化为对象进行处理。 序列化提供了一种方便的方式来在不同的场景中传输和存储对象数据。它在网络传输、持久化存储和进程间通信等方面都有广泛的应用。 Android实现对象序列化的方式 在Android中常用的实现对象序列化有以下几种方式 实现Serializable接口在需要序列化的类中实现Serializable接口该接口没有任何方法只是作为一个标记接口。然后使用ObjectOutputStream将对象写入输出流使用ObjectInputStream从输入流中读取对象。示例代码如下 public class MyClass implements Serializable {// 类的成员变量和方法public static void main(String[] args) {// 序列化对象MyClass obj new MyClass();try {FileOutputStream fileOut new FileOutputStream(object.ser);ObjectOutputStream out new ObjectOutputStream(fileOut);out.writeObject(obj);out.close();fileOut.close();System.out.println(对象已序列化);} catch (IOException e) {e.printStackTrace();}// 反序列化对象MyClass newObj null;try {FileInputStream fileIn new FileInputStream(object.ser);ObjectInputStream in new ObjectInputStream(fileIn);newObj (MyClass) in.readObject();in.close();fileIn.close();System.out.println(对象已反序列化);} catch (IOException | ClassNotFoundException e) {e.printStackTrace();}} }实现Parcelable接口Parcelable接口是Android特有的接口相比Serializable接口它更高效。在需要序列化的类中实现Parcelable接口并实现相关方法。然后使用Parcel对象将对象写入Parcel使用Parcel对象从Parcel中读取对象。示例代码如下 public class MyClass implements Parcelable {// 类的成员变量和方法protected MyClass(Parcel in) {// 从Parcel中读取数据并赋值给成员变量}public static final CreatorMyClass CREATOR new CreatorMyClass() {Overridepublic MyClass createFromParcel(Parcel in) {return new MyClass(in);}Overridepublic MyClass[] newArray(int size) {return new MyClass[size];}};Overridepublic int describeContents() {return 0;}Overridepublic void writeToParcel(Parcel dest, int flags) {// 将成员变量写入Parcel} }使用Gson库Gson是Google提供的一个用于在Java对象和JSON数据之间进行序列化和反序列化的库。可以使用Gson将对象转换为JSON字符串然后再将JSON字符串转换为对象。示例代码如下 public class MyClass {// 类的成员变量和方法public static void main(String[] args) {// 序列化对象MyClass obj new MyClass();Gson gson new Gson();String json gson.toJson(obj);System.out.println(对象已序列化为JSON字符串 json);// 反序列化对象MyClass newObj gson.fromJson(json, MyClass.class);System.out.println(JSON字符串已反序列化为对象);} }序列化原理 Serializable是Java中的一个接口用于实现对象的序列化和反序列化。序列化是指将对象转换为字节流的过程而反序列化则是将字节流转换为对象的过程。 Serializable接口没有任何方法它只是一个标记接口用于告诉Java虚拟机该类可以被序列化。要实现序列化只需要让类实现Serializable接口即可。 在序列化过程中Java虚拟机会将对象的状态转换为字节序列然后可以将字节序列保存到文件、数据库或通过网络传输。反序列化过程则是将字节序列重新转换为对象的状态。 在序列化过程中Java虚拟机会对对象的各个字段进行序列化。对于基本类型和引用类型Java虚拟机会自动进行序列化。对于自定义类型需要实现Serializable接口并且保证该类型的所有成员变量也是可序列化的。 在反序列化过程中Java虚拟机会根据字节序列重新创建对象并将字节序列中的数据赋值给对象的各个字段。 需要注意的是序列化和反序列化的过程中对象的构造函数不会被调用。因此在反序列化过程中如果需要进行一些初始化操作可以使用特殊的方法readObject()来实现。 总结起来Serializable接口提供了一种简单的方式来实现对象的序列化和反序列化。通过实现Serializable接口可以将对象转换为字节序列以便在不同的环境中进行传输和存储。 Parcelable是Android中用于实现对象序列化的接口。它的原理是将对象的数据按照一定的格式进行打包和解包以便在不同的组件之间传输或存储。 具体实现步骤如下 实现Parcelable接口在需要序列化的类中实现Parcelable接口并实现其中的方法包括describeContents()和writeToParcel(Parcel dest, int flags)。 describeContents()方法该方法返回一个标志位用于描述Parcelable对象特殊对象的类型。一般情况下返回0即可。 writeToParcel(Parcel dest, int flags)方法该方法将对象的数据写入Parcel对象中。在该方法中需要将对象的各个字段按照一定的顺序写入Parcel对象中以便在解包时按照相同的顺序读取。 实现Parcelable.Creator接口在需要序列化的类中实现Parcelable.Creator接口并实现其中的方法包括createFromParcel(Parcel source)和newArray(int size)。 createFromParcel(Parcel source)方法该方法从Parcel对象中读取数据并创建出Parcelable对象。在该方法中需要按照写入Parcel对象时的顺序读取数据并将其赋值给相应的字段。 newArray(int size)方法该方法返回一个指定大小的Parcelable数组。 通过实现Parcelable接口可以将对象的数据打包成一个Parcel对象然后可以通过Intent传递给其他组件或者通过Bundle存储到本地。在接收端可以通过读取Parcel对象的数据重新构建出原始的对象。 总结起来Parcelable的原理就是将对象的数据按照一定的格式进行打包和解包以实现对象的序列化和反序列化。这种方式相对于Java中的Serializable接口更加高效和灵活。 Serializable/Parcelable对比 Serializable和Parcelable都是用于实现对象的序列化和反序列化的接口但在实现方式和性能方面有所不同。 Serializable Serializable是Java提供的默认序列化机制通过实现Serializable接口可以将对象转换为字节流以便在网络传输或保存到文件中。Serializable使用反射机制将对象的状态保存到字节流中然后再从字节流中恢复对象的状态。这种方式相对简单但效率较低。Serializable的缺点是序列化和反序列化的过程需要大量的I/O操作对性能要求较高的场景下可能会影响程序的执行效率。 Parcelable Parcelable是Android提供的专门用于Android平台的序列化机制通过实现Parcelable接口可以将对象转换为字节流以便在Activity之间传递。Parcelable使用了更加高效的序列化方式将对象的状态拆分为多个字段分别写入和读取字节流。这种方式相对复杂但效率较高。Parcelable的优点是序列化和反序列化的过程更加高效对性能要求较高的场景下可以提升程序的执行效率。 Serializable适用于简单的序列化场景而Parcelable适用于对性能要求较高的Android平台。在选择使用Serializable还是Parcelable时需要根据具体的需求和性能要求进行权衡。 数据来自parcelable-vs-serializable实验结果对比Parcelable的效率比Serializable快10倍以上。 总结 对比SerializableParcelable所属APIJava APIAndroid SDK API特点序列化和反序列化会经过大量的I/O操作产生大量的临时变量引起GC且反序列化时需要反射基于内存拷贝实现的封装和解封(marshalled unmarshalled)序列化基于Native层实现开销相对高相对低效率相对低相对高适用场景简单序列化Android 在使用Serializable进行对象的序列化时有一些注意点需要注意 类的定义被序列化的类需要实现Serializable接口这是Java提供的一个标记接口用于表示该类可以被序列化。如果一个类没有实现Serializable接口那么在进行序列化时会抛出NotSerializableException异常。 成员变量的序列化被序列化的类的所有成员变量都会被序列化包括私有成员变量。但是如果某个成员变量不希望被序列化可以使用transient关键字进行修饰被修饰的成员变量在序列化过程中会被忽略。 对象引用的序列化如果一个类中包含其他对象的引用那么在序列化时被引用的对象也会被序列化。但是如果被引用的对象没有实现Serializable接口那么在序列化时会抛出NotSerializableException异常。为了解决这个问题可以将被引用的对象设置为transient或者让被引用的对象也实现Serializable接口。 序列化版本号在进行对象的序列化时会为每个被序列化的类自动生成一个序列化版本号。这个版本号用于在反序列化时判断序列化的类和反序列化的类是否兼容。如果序列化的类和反序列化的类的版本号不一致会抛出InvalidClassException异常。为了避免这个问题可以显式地为类指定一个固定的序列化版本号可以使用serialVersionUID关键字进行指定。 序列化的安全性在进行对象的序列化时需要注意序列化的安全性。因为序列化的数据可以被反序列化成对象如果序列化的数据被篡改可能会导致安全漏洞。为了增强序列化的安全性可以使用加密算法对序列化的数据进行加密或者对序列化的类进行签名验证。 在使用Parcelable进行序列化时有几个注意点需要注意 实现Parcelable接口要使一个类可序列化需要让该类实现Parcelable接口并实现其中的方法。这些方法包括writeToParcel()和createFromParcel()等。 内部类的序列化如果要序列化的类中包含内部类需要确保内部类也实现了Parcelable接口并在外部类的writeToParcel()和createFromParcel()方法中对内部类进行序列化和反序列化。 序列化顺序在writeToParcel()方法中需要按照成员变量的顺序将数据写入Parcel对象。在createFromParcel()方法中需要按照写入的顺序读取数据。 序列化和反序列化的一致性在序列化和反序列化过程中需要确保写入和读取的数据类型一致。例如如果在writeToParcel()方法中写入了一个整数那么在createFromParcel()方法中读取时也需要使用相同的方法读取整数。 版本控制如果在序列化的类中进行了修改需要注意版本控制。可以通过给类添加一个版本号来实现版本控制以便在反序列化时能够正确处理不同版本的数据。 使用Parcelable进行序列化时需要确保实现了Parcelable接口并注意序列化顺序、内部类的序列化、数据类型的一致性和版本控制等问题。
http://www.hkea.cn/news/14592521/

相关文章:

  • 网站建设导航分哪几类昭阳区建设局网站
  • 网站网站制作网vi设计主题品牌
  • wordpress分站没有服务器如何做网站
  • 如何搭建网站建设环境企业网站建设调研报告
  • 乐都企业网站建设公司泉州专业网站建设费用
  • 承德网站网站建设郑州建设银行官网站
  • 凡科做的网站怎么改壁纸中山市建设局网站窗口电话号码
  • 沈阳网站推广排名方案wordpress 音频
  • 建设人才信息网是什么网站网上购物商城开发
  • 东莞网站排名优化报价凡客诚品正品官网
  • 企业网站的建设与维护舆情分析报告案例
  • 电脑路由器做网站服务器吗凡科网做网站视频
  • 创新的赣州网站建设官网建设的重要性
  • 建立个人网站的方法个人网站备案模板
  • 哪些网站平台可以做推广昌平做网站
  • 用帝国cms做视频网站vs做网站示例
  • 专业开发网站建设做网站推广怎么做
  • 网站制作生成器企业如何选择网站
  • 郑州的电子商城网站建设什么是无主体新增网站
  • dedecms 做微网站自己做门户网站
  • 广西电商网站网站建设需要哪种人才
  • 帮老板做网站wordpress首页调用文章页图片
  • 网站程序基础找工程包工平台
  • 爱电影网站lnmp 内网 wordpress
  • 用python做购物网站会员卡系统
  • 昆明网站开发公司cms网站建设教程
  • 企业做网站etp和源程序用jsp做网站的技术路线
  • 东莞建站公司案例全网天下案例网站设计的目的
  • 深圳公司网站备案手机百度安装下载
  • 网站开发用什么程序好什么是网络营销的职能