选择性地序列化方式

why选择性序列化?

实际开发过程中,我们常常会遇到这样的问题,这个类的有些属性需要序列化,而其他属性不需要被序列化,打个比方,如果一个用户有一些敏感信息(如密码,银行卡号等),为了安全起见,不希望在网络操作(主要涉及到序列化操作,本地序列化缓存也适用)中被传输,这些信息对应的变量就可以加上transient关键字。换句话说,这个字段的生命周期仅存于调用者的内存中而不会写到磁盘里持久化。

总之,java 的transient关键字为我们提供了便利,你只需要实现Serilizable接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。

How?

有两种,

  • transient关键字:类实现Serilizable接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中,其值为null或者其他默认值
  •  Externalizable接口,手动指定序列化:我们知道在Java中,对象的序列化可以通过实现两种接口来实现,若实现的是Serializable接口,则所有的序列化将会自动进行,若实现的是Externalizable接口,则没有任何东西可以自动序列化,需要在writeExternal方法中进行手工指定所要序列化的变量。

Attention:

1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。

2)transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。

3)被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。

时间: 2024-10-10 02:26:21

选择性地序列化方式的相关文章

移动App通讯协议及序列化方式的选择

简单列一下不同协议,序列化方式等的考虑. http还是私有协议? http协议优/缺点: 在服务器端只需要提供一份接口,浏览器和app共用.在app中嵌入web view也很容易. http协议的相关工具非常多.开发人员很方便 .比如负载均衡,直接nginx搞定. 比如统计一个接口的调用次数,相当的方便,有现在的分析工具. 压力测试也很方便. http协议可能http服务器有漏洞,但是这种漏洞真的是很少. 手机可以设置http proxy,这对于某些用户可能是很关键的.如果是私有协议,设置htt

Android中两种序列化方式的比较Serializable和Parcelable

Serializable和Parcelable接口可以完成对象的序列化过程,当我们需要通过Intent和Binder传输数据时就需要使用者两种序列化方式.还有,我们需要对象持久化到存储设备或者通过网络传输给其他客户端,这个使用也需要使用Serializale来完成对象的序列化.在Android应用开发中,这两种方式都很常见,但两者方式并不相同. 1.Serializable接口 Serializable接口是Java提供的一个序列化接口,它是一个空接口,为对象提供标准的序列化和反序列化操作.使用

几种Java序列化方式的实现

0.前言 本文主要对几种常见Java序列化方式进行实现.包括Java原生以流的方法进行的序列化.Json序列化.FastJson序列化.Protobuff序列化. 1.Java原生序列化 Java原生序列化方法即通过Java原生流(InputStream和OutputStream之间的转化)的方式进行转化.需要注意的是JavaBean实体类必须实现Serializable接口,否则无法序列化.Java原生序列化代码示例如下所示: package serialize; import java.io

Android 进阶6:两种序列化方式 Serializable 和 Parcelable

什么是序列化 我们总是说着或者听说着"序列化",它的定义是什么呢? 序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储区.以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象. 二进制序列化保持类型保真度,这对于在应用程序的不同调用之间保留对象的状态很有用.例如,通过将对象序列化到剪贴板,可在不同的应用程序之间共享对象.您可以将对象序列化到流.磁盘.内存和网络等等.远程处理使用序列化&

.net 各种序列化方式效率对比

在服务与服务之间传输的是二进制数据,而在此之前有多种方法将数据内容进行序列化来减小数据传递大小,现针对于目前主流的几种序列化方式做了简单数据统计对比. 先做下简单介绍↓↓↓ 1.protobuf-net protobuf-net is a contract based serializer for .NET code, that happens to write data in the "protocol buffers" serialization format engineered

Netty5 序列化方式(Jboss Marshalling)

Netty作为很多高性能的底层通讯工具,被很多开发框架应用再底层,今天来说说常用的序列化工具,用Jboss的Marshalling. 直接上代码,Marshalling的工厂类 package com.netty.serialize.marshalling; import io.netty.handler.codec.marshalling.*; import org.jboss.marshalling.MarshallerFactory; import org.jboss.marshallin

MEF(Managed Extensibility Framework)有选择性地使用扩展组件

在"MEF(Managed Extensibility Framework)使用全部扩展组件"中,客户端应用程序调用了所有的扩展组件,而且如果有新的扩展组件加入,必须先关闭程序,再重新启动才可以调用所有组件. 本篇体验使用MEF的ExportMetadata特性,有选择性地使用某些扩展组件,使用Lazy<>,让客户端程序延迟动态加载组件,即使不关闭应用程序,也能调用所有组件. ● StudentMEF.Lib, 类库,包含接口IStudent.cs ● StudentMEF

Cognos隐藏报表运行时提示选择报表发送方式

cognos8.3 隐藏报表运行时提示选择报表发送方式 (2010-11-21 12:06:02) 转载▼ 标签: cognos 杂谈 分类: Cognos 找到c8\webapps\p2pd\WEB-INF\classes下的viewer_XX.properties文件,XX是指区域,EN指英文地区,CN指中国,所以先备份viewer_CN.properties,把RV_BUSY_OPTIONS_SELECTED .RV_BUSY_OPTIONS_UNSELECTED.RV_BUSY_OPTI

LR选择哪种方式录制

LR选择哪种方式录制,有以下考虑原则: 1.基于浏览器的应用程序推荐使用HTML-basic script方式录制 2.不是基于浏览器的应用程序推荐使用URL-basic script方式录制 3.如果基于浏览器的应用程序包中包含了javascript并且该脚本向服务器产生了请求,比如DataGrid的分页按钮等,也要使用URL-basic script方式录制 4.基于浏览器的应用程序中使用了HTTPS安全协议,则使用URL-basic方式录制