Android 序列化 反序列功能

 1  /**
 2      * 序列化对象
 3      *
 4      * @return  序列化后的字符串
 5      */
 6     private String serializeObject(Object object) {
 7         ByteArrayOutputStream byteArrayOutputStream=null;
 8         ObjectOutputStream objectOutputStream=null;
 9         String serStr="";
10         try{
11             byteArrayOutputStream = new ByteArrayOutputStream();
12             objectOutputStream = new ObjectOutputStream(
13                     byteArrayOutputStream);
14             objectOutputStream.writeObject(object);
15             serStr = byteArrayOutputStream.toString("ISO-8859-1");
16             serStr = java.net.URLEncoder.encode(serStr, "UTF-8");
17         }catch (IOException ex){
18
19         }finally {
20             if(objectOutputStream!=null)
21                 try {
22                     objectOutputStream.close();
23                 } catch (IOException e) {
24                     e.printStackTrace();
25                 }
26             if(byteArrayOutputStream!=null)
27                 try {
28                     byteArrayOutputStream.close();
29                 } catch (IOException e) {
30                     e.printStackTrace();
31                 }
32             return serStr;
33         }
34     }
35
36     /**
37      * 反序列化对象
38      *
39      * @param str
40      * @return 反序列化后的对象
41      */
42     private Object deSerializeObject(String str){
43         String redStr = null;
44         try {
45             redStr = URLDecoder.decode(str, "UTF-8");
46         } catch (UnsupportedEncodingException e) {
47             e.printStackTrace();
48         }
49         ByteArrayInputStream byteArrayInputStream=null;
50         ObjectInputStream objectInputStream=null;
51         Object object=null;
52         try{
53             byteArrayInputStream = new ByteArrayInputStream(
54                     redStr.getBytes("ISO-8859-1"));
55             objectInputStream = new ObjectInputStream(
56                     byteArrayInputStream);
57             object=objectInputStream.readObject();
58         }catch (Exception ex){
59
60         }finally {
61             if(objectInputStream!=null)
62                 try {
63                     objectInputStream.close();
64                 } catch (IOException e) {
65                     e.printStackTrace();
66                 }
67             if(byteArrayInputStream!=null)
68                 try {
69                     byteArrayInputStream.close();
70                 } catch (IOException e) {
71                     e.printStackTrace();
72                 }
73         }
74         return object;
75     }

测试示例:

 1 public void testSerialize(){
 2         Person person = new Person();
 3         person.setName("LULU");
 4         person.setSex("bitch");
 5         person.setAddress("北京海淀");
 6         person.setAge(20);
 7         person.setTel("1231312");
 8         person.setEducation("小学");
 9         String str=serializeObject(person);
10         Person newP= (Person) deSerializeObject(str);
11         if(newP!=null){
12             String s=newP.toString();
13         }
14     User user=new User("192.168.0.30",8080);
15         String userStr=serializeObject(user);
16         User deUser= (User) deSerializeObject(userStr);
17         int p=deUser.query_port;
18         List<User> users=new ArrayList<>();//序列化集合,只需要集合类的数据可以被序列化就行,序列化的方法跟其他的类序列化的方法一样
19         users.add(user);
20         String l=serializeObject(users);
21         List<User> newL= (List<User>) deSerializeObject(l);
22         newL.toString();
23     }
1 public class User implements Serializable {
2     public  String query_ip;
3     public int query_port;
4     public User(String ip,int p){
5         query_ip=ip;
6         query_port=p;
7     }
8 }
 1 public class Person implements Serializable {
 2     /**
 3      *
 4      */
 5     private static final long serialVersionUID = 1L;
 6     String name;
 7     int age;
 8     String address;
 9     String education;
10     String tel;
11
12     public int getAge() {
13         return age;
14     }
15
16     public void setAge(int age) {
17         this.age = age;
18     }
19
20     public String getAddress() {
21         return address;
22     }
23
24     public void setAddress(String address) {
25         this.address = address;
26     }
27
28     public String getEducation() {
29         return education;
30     }
31
32     public void setEducation(String education) {
33         this.education = education;
34     }
35
36     public String getTel() {
37         return tel;
38     }
39
40     public void setTel(String tel) {
41         this.tel = tel;
42     }
43
44     public String getName() {
45         return name;
46     }
47
48     public void setName(String name) {
49         this.name = name;
50     }
51
52     public String getSex() {
53         return sex;
54     }
55
56     public void setSex(String sex) {
57         this.sex = sex;
58     }
59
60     String sex;
61
62     @Override
63     public String toString() {
64         return "Person [name=" + name + ", age=" + age + ", address=" + address
65                 + ", education=" + education + ", tel=" + tel + ", sex=" + sex
66                 + "]";
67     }
68 }
时间: 2024-12-28 01:06:44

Android 序列化 反序列功能的相关文章

Android 序列化对象接口Parcelable使用方法

什么是Parcelable ? Parcelable,定义了将数据写入Parcel,和从Parcel中读出的接口.一个实体(用类来表示),如果需要封装到消息中去,就必须实现这一接口,实现了这一接口,该实体就成为"可打包的"了. Parcelable 传递对象 Android序列化对象主要有两种方法: 1.实现Serializable接口,实现Serializable接口是JavaSE本身就支持的; 2.实现Parcelable接口,Parcelable是Android特有的功能,效率比

Android开发之漫漫长途 X——Android序列化

该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解Android 卷Ⅰ,Ⅱ,Ⅲ>中的相关知识,另外也借鉴了其他的优质博客,在此向各位大神表示感谢,膜拜!!!另外,本系列文章知识可能需要有一定Android开发基础和项目经验的同学才能更好理解,也就是说该系列文章面向的是Android中高级开发工程师. 前言 上一篇中我们比较详尽的分析了ServiceManag

集成Android免费语音合成功能(在线、离线、离在线融合)

集成Android免费语音合成功能(在线.离线.离在线融合),有这一篇文章就够了(离线)集成Android免费语音合成功能(在线.离线.离在线融合),有这一篇文章就够了(离在线融合) 转眼间,大半年没写文章了,没什么理由,就是人变懒了.囧~ 看标题,其实大家都被骗了,有这一篇文章还不够,我其实是打算分3篇文章来写的,如果合在一章里面就太长了,不过现在这个标题党横行的网络世界,我也被污染了,哈.那么为什么要分3篇文章来讲呢?看标题也能猜到了,就是在线.离线.离在线融合这3种语音合成方式,我将分别使

Android &#39;记住密码&#39;功能

1.运行后界面图 2.主要代码: 2.1 activity_main.xml(2个TextView 2个EditText 1个CheckBox以及1个Button): 1 <TextView 2 android:id="@+id/tvAccount" 3 android:layout_width="wrap_content" 4 android:layout_height="wrap_content" 5 android:layout_al

erlang-百度云推送Android服务端功能实现-erlang

百度云推送官方地址http://developer.baidu.com/wiki/index.php?title=docs/cplat/push 简单的介绍下原理: 百度云推送支持IOS和Android的云推送.Android支持的还不错,但是IOS一般很难调通.百度云对于IOS的推送来说,他只是做了一个中间的代理,为用户提供接口,优点是使用百度云推送,Android和IOS可以统一管理:缺点是:调通不容易,用户的IOS证书需要上传验证,会直接暴露给第三方,并且IOS的apns支持用户自己构建p

Android微信自动回复功能

Android微信自动回复功能 本文原创,转载请经过本人准许. 写在前面: 最近接到老大的一个需求,要求在手机端拦截微信的通知(Notification),从而获得联系人和内容.之后将联系人和内容发送到我们的硬件产品上,展示出来之后,再将我们想回复内容传给微信,并且发送给相应联系人. 老大还提示我需要用AccessibilityService去实现它,当然在此之前我并不知道AccessibilityService是什么鬼,不过没关系, just do IT ! AccessibilityServ

Android微信分享功能实例+demo

Android微信分享功能实例 1 微信开放平台注册 2 获得appId,添加到程序中,并运行程序 3 使用应用签名apk生成签名,添加到微信开放平台应用签名,完成注册 4 测试分享功能. 有问题请留言  o(∩_∩)o 哈哈 代码如下: package com.wx; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import a

Android 带清除功能的输入框控件ClearEditText,仿IOS的输入框

转载请注明出处http://blog.csdn.net/xiaanming/article/details/11066685 今天给大家带来一个很实用的小控件ClearEditText,就是在Android系统的输入框右边加入一个小图标,点击小图标可以清除输入框里面的内容,IOS上面直接设置某个属性就可以实现这一功能,但是Android原生EditText不具备此功能,所以要想实现这一功能我们需要重写EditText,接下来就带大家来实现这一小小的功能 我们知道,我们可以为我们的输入框在上下左右

Android序列化

序列化介绍: 一.序列化.反序列化是什么? (1) 名词解释 对象的序列化 : 把Java对象转换为字节序列并存储至一个储存媒介的过程.对象的反序列化:把字节序列恢复为Java对象的过程. (2) 序列化详细解释 对象的序列化涉及三个点关键点:Java对象.字节序列.存储. 1. Java对象的组成?Java对象包含变量与方法.但是序列与反序列化仅处理Java变量而不处理方法,序列与反序列化仅对数据进行处理. 2. 什么是字符序列?字符序列是两个词,字符是在计算机和电信领域中,字符(Charac