对象的序列化

序列化 (Serialization)

1 将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
序列化使其他代码可以查看或修改那些不序列化便无法访问的对象实例数据。确切地说,代码执行序列化需要特殊的权限:即指定了 SerializationFormatter 标志的 SecurityPermission。在默认策略下,通过 Internet 下载的代码或 Intranet 代码不会授予该权限;只有本地计算机上的代码才被授予该权限。
通常,对象实例的所有字段都会被序列化,这意味着数据会被表示为实例的序列化数据。这样,能够解释该格式的代码有可能能够确定这些数据的值,而不依赖于该成员的可访问性。类似地,反序列化从序列化的表示形式中提取数据,并直接设置对象状态,这也与可访问性规则无关。
对于任何可能包含重要的安全性数据的对象,如果可能,应该使该对象不可序列化。如果它必须为可序列化的,请尝试生成特定字段来保存不可序列化的重要数据。如果无法实现这一点,则应注意该数据会被公开给任何拥有序列化权限的代码,并确保不让任何恶意代码获得该权限。

2 解释

序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。

3 目的

1、以某种存储形式使自定义对象持久化
2、将对象从一个地方传递到另一个地方。
3、使程序更具维护性。

当程序搜索数据库时,如果其中所存储的对象不能反序列化,程序将报错!!!
故序列化时要保证对象的字段能正常的映射到数据库。

因为JDK1.3/1.4不支持泛型,所以写法比支持对象嵌套的要复杂,附件是自己研究的一个例子 /* ===========================JSON字符串转换为Java Object===============================*/ String sibill = ""; sibill = "{\"blno\":\"123\",\"cutofftime\":\"2011-1-12\",\"vsl\":\"vsl\",\"voy\":\"voy\",\"port\":\"port\",\"consigneename\":\"consigneename\",\"consigneeaddress\":\"consigneeaddress\",\"consigneecityc\":\"consigneecitycountry\","+ "\"cntr\":[{\"cntrno\":\"111111\",\"cl\":\"拼箱\",\"sealnum\":\"sealnum1\",\"size\":\"40\",\"box\":\"H1\",\"cgo\":[{\"cgonum\":\"cgonum11\",\"cgoweight\":\"cgoweight1\",\"cgosize\":\"cgosize1\",\"cgohscode\":\"cgohscode1\",\"cgoowner\":\"cgoowner1\"}]},"+ "{\"cntrno\":\"222222\",\"cl\":\"整箱\",\"sealnum\":\"sealnum2\",\"size\":\"48\",\"box\":\"G1\",\"cgo\":[{\"cgonum\":\"cgonum21\",\"cgoweight\":\"cgoweight1\",\"cgosize\":\"cgosize1\",\"cgohscode\":\"cgohscode1\",\"cgoowner\":\"cgoowner1\"},{\"cgonum\":\"cgonum22\",\"cgoweight\":\"cgoweight2\",\"cgosize\":\"cgosize2\",\"cgohscode\":\"cgohscode2\",\"cgoowner\":\"cgoowner2\"}]}]"+ "}"; /* 第一步 (直接转换为Java Object) */ SiBillBean sibillbean = (SiBillBean)JSONObject.toBean(JSONObject.fromObject(sibill),SiBillBean.class); /* 第二布 (取出嵌套对象属性值) */ JSONArray arrCntr = sibillbean.getCntr(); for (int i = 0; i < arrCntr.size(); i++) { JSONObject cntr = (JSONObject)arrCntr.get(i); CntrBean cntrBean = (CntrBean)JSONObject.toBean(cntr,CntrBean.class); System.out.println(cntrBean); JSONArray arrCgo = cntrBean.getCgo(); for (int j = 0; j < arrCgo.size(); j++) { JSONObject cgo = (JSONObject)arrCgo.get(j); CgoBean cgoBean = (CgoBean)JSONObject.toBean(cgo,CgoBean.class); System.out.println(cgoBean); } } /* 第二布 end */ /* ===========================Java Object转换为JSON字符串===============================*/ //CGO 1/2/3 CgoBean cgoBean1 = new CgoBean(); cgoBean1.setCgonum("cgo11"); CgoBean cgoBean2 = new CgoBean(); cgoBean2.setCgonum("cgo21"); CgoBean cgoBean3 = new CgoBean(); cgoBean3.setCgonum("cgo22"); //CNTR1 CntrBean cntrBean1 = new CntrBean(); cntrBean1.setCntrno("cntr1"); JSONArray jsonArrayCntr1 = new JSONArray(); jsonArrayCntr1.add(0, cgoBean1); cntrBean1.setCgo(jsonArrayCntr1); //CNTR2 CntrBean cntrBean2 = new CntrBean(); cntrBean2.setCntrno("cntr2"); JSONArray jsonArrayCntr2 = new JSONArray(); jsonArrayCntr2.add(0, cgoBean2); jsonArrayCntr2.add(1, cgoBean3); cntrBean2.setCgo(jsonArrayCntr2); //SIBILL SiBillBean sibillb = new SiBillBean(); sibillb.setBlno("COSU 123456789"); JSONArray jsonArraySiBill = new JSONArray(); jsonArraySiBill.add(0, cntrBean1); jsonArraySiBill.add(1, cntrBean2); sibillb.setCntr(jsonArraySiBill); System.out.println(JSONObject.fromObject(sibillb));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值