对象的序列化与反序列化其实就是将对象的状态保存下来,一般是保存到文件中,但是其实更常用的是将对象序列化为字符串保存到数据库中,然后在需要读取对象的情况下将字符串反序列化为对象。

 

  可以序列化的类必须实现Serializabe接口,此处需要注意的是如果某个属性不需要被序列化,可以添加transient关键字。

下面是一个可以被序列化的类:

  1. package demo1;
  2.  
  3. import java.io.Serializable;
  4.  
  5. public class Person implements Serializable{
  6.  
  7. private static final long serialVersionUID = 1L;
  8. private int id;
  9. private String name;
  10. private int age;
  11. private transient String sex;
  12.  
  13. public Person(int id, String name, int age,String sex) {
  14. super();
  15. this.id = id;
  16. this.name = name;
  17. this.age = age;
  18. this.sex = sex;
  19. }
  20. public int getId() {
  21. return id;
  22. }
  23. public void setId(int id) {
  24. this.id = id;
  25. }
  26. public String getName() {
  27. return name;
  28. }
  29. public void setName(String name) {
  30. this.name = name;
  31. }
  32. public int getAge() {
  33. return age;
  34. }
  35. public void setAge(int age) {
  36. this.age = age;
  37. }
  38.  
  39. public String getSex() {
  40. return sex;
  41. }
  42. public void setSex(String sex) {
  43. this.sex = sex;
  44. }
  45. @Override
  46. public String toString() {
  47. return this.id+" "+this.name+" "+this.age+" "+this.sex;
  48. }
  49. }

下面是封装序列化的类:

  1. package demo1;
  2.  
  3. import java.io.ByteArrayInputStream;
  4. import java.io.ByteArrayOutputStream;
  5. import java.io.IOException;
  6. import java.io.ObjectInputStream;
  7. import java.io.ObjectOutputStream;
  8.  
  9. public class SerializeUtils {
  10.  
  11. public static String serialize(Object obj) throws IOException {
  12. ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
  13. ObjectOutputStream objectOutputStream;
  14. objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
  15. objectOutputStream.writeObject(obj);
  16. String string = byteArrayOutputStream.toString("ISO-8859-1");
  17. objectOutputStream.close();
  18. byteArrayOutputStream.close();
  19. return string;
  20. }
  21. public static Object serializeToObject(String str) throws IOException, ClassNotFoundException {
  22. ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(str.getBytes("ISO-8859-1"));
  23. ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);
  24. Object object = objectInputStream.readObject();
  25. objectInputStream.close();
  26. byteArrayInputStream.close();
  27. return object;
  28. }
  29. }

下面是使用redis简单的将对象序列化后保存到数据库中然后再从数据库中取出数据反序列化的过程:

  1. public class DemoAtomic {
  2. public static void main(String [] args) throws IOException, ClassNotFoundException {
  3. Jedis jedis = new Jedis("localhost",6379);
  4. jedis.setex("test1", 60*60*24,SerializeUtils.serialize(new Person(1, "测试1", 21,"男")));
  5. jedis.setex("test2", 60*60*24,SerializeUtils.serialize(new Person(2, "测试2", 21,"女")));
  6. jedis.setex("test3", 60*60*24,SerializeUtils.serialize(new Person(3, "测试3", 21,"男")));
  7. jedis.setex("test4", 60*60*24,SerializeUtils.serialize(new Person(4, "测试4", 21,"女")));
  8. Set<String> keys = jedis.keys("*");
  9. for (String s:keys) {
  10. System.out.println(s);
  11. Person person = (Person)SerializeUtils.serializeToObject(jedis.get(s));
  12. System.out.println(person.toString());
  13. }
  14. }
  15. }

下面为打印数据:

  1. test4
  2. 4 测试4 21 null
  3. test2
  4. 2 测试2 21 null
  5. test3
  6. 3 测试3 21 null
  7. test1
  8. 1 测试1 21 null

Java序列化对象为字符串并将字符串反序列化为对象的更多相关文章

  1. JSON字符串反序列化成对象_部分属性值反序列化失败

    简介:本人在开发webapi接口时遇到了:一个复杂的Json字符串在反序列化为对象时报,无法发序列化其中的一个属性对象? 使用方法: InternalRecommendRequestFormModel ...

  2. 将JSON字符串反序列化为指定的.NET对象类型

    目录导航: 前言: 方法一.在项目中定义对应的对象参数模型,用于映射反序列化出来的参数(复杂JSON字符串数据推荐使用): 方法二.直接将JSON字符串格式数据反序列化转化为字典数据(简单JSON字符 ...

  3. spring mvc接收ajax提交的JSON数据,并反序列化为对象

    需求:spring mvc接收ajax提交的JSON数据,并反序列化为对象,代码如下: 前台JS代码: //属性要与带转化的对象属性对应 var param={name:'语文',price:16}; ...

  4. JAVA中如何将一个json形式的字符串转为json对象或对象列表

    import java.util.*; import java.text.SimpleDateFormat; import org.json.JSONObject; import org.json.J ...

  5. C# 后台解析json,简单方法 字符串序列化为对象,取值

    如果后台是一个JSON的字符串格式如下: string str = "{\"Success\":true,\"Msg\":\"成功!\&qu ...

  6. JavaScriptSerializer类 对象序列化为JSON,JSON反序列化为对象

    JavaScriptSerializer 类由异步通信层内部使用,用于序列化和反序列化在浏览器和 Web 服务器之间传递的数据.说白了就是能够直接将一个C#对象传送到前台页面成为javascript对 ...

  7. JavaScriptSerializer类 对象序列化为JSON,JSON反序列化为对象 。

    JavaScriptSerializer 类由异步通信层内部使用,用于序列化和反序列化在浏览器和 Web 服务器之间传递的数据.说白了就是能够直接将一个C#对象传送到前台页面成为javascript对 ...

  8. Java自定义方法转换前端提交的json字符串为JsonObject对象

    前端提交json字符串格式数据,Java后端通过自定义方法接收json字符串数据并转换为JsonObject对象,代码如下放到RequestData.Java类中: public static JSO ...

  9. C++如何输入单行和多行带空格的字符串并将字符串倒序输出

    首先,我们知道在C++中,空格或者回车被认为是字符串的分割标志,使用cin输入string类的字符串时遇到会自动停止接收输入 例如,当如下程序时: #include <bits/stdc++.h ...

随机推荐

  1. POJ2559 Largest Rectangle in a Histogram (单调栈

    Largest Rectangle in a Histogram Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 26012 ...

  2. Kafka自我学习-报错篇

    1. kafka启动出现:Unsupported major.minor version 52.0 错误,  具体的错误输出: Exception in thread "main" ...

  3. springMvc4+hibernate4+activiti5.15(Maven)

    首先创建activiti表 方式1.用代码创建 package createtable; import org.activiti.engine.ProcessEngineConfiguration; ...

  4. 51nod1031(简单斐波拉契数列)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1031 题意:中文题诶- 思路:对于第x块骨牌的情况,我们用a ...

  5. bzoj4764: 弹飞大爷 link-cut-tree

    题目传送门 这道题啊 调了一个晚上 因为写的是一个有根树和n个基环的写法 所以写得很奇怪..... 最后发现单独处理树的时候不能随意改变S(就是原来的根)不然size会出错.... #include& ...

  6. bzoj 1001 平面图转对偶图 最短路求图最小割

    原题传送门http://www.lydsy.com/JudgeOnline/problem.php?id=1001 整理了下之前A的题 平面图可以转化成对偶图,然后(NlogN)的可以求出图的最小割( ...

  7. 大型网站调试工具之一(php性能优化分析工具XDebug)

    一.安装配置 1.下载PHP的XDebug扩展,网址:http://xdebug.org/ 2.在Linux下编译安装XDebug 引用 tar -xzf xdebug-2.0.0RC3.gzcd x ...

  8. 亮相SIGGRAPH 太极拳三维教学App制作揭秘

    http://news.hxsd.com/CG-animation/201208/663303.html 编者按:<My Tai Chi>是一系列基于移动平台的三维互动产品,由北京七星汇工 ...

  9. Jxl、JxCell图表导出功能的实现

    最近接触过许多报表导出功能,也用过多种工具进行导出功能的实现,但对于图表的导出一直没有仔细的去展开研究和探讨,直到最近略微整理了下这方面的需求和技术攻克. 首先导出excel功能的实现主要有JXL.J ...

  10. Python 进阶 之 map()函数

    map()函数主要功能是对批量的元素进行相同的操作时可以大幅度的缩减代码. map函数参数详解: map(param1,param2,***) param1:函数名 ,要对批量元素进行处理的funct ...