在路上

 找回密码
 立即注册
在路上 站点首页 学习 查看内容

Java实现序列化与反序列化的简单示例

2016-7-29 15:34| 发布者: zhangjf| 查看: 724| 评论: 0

摘要: 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程。 2.为什么需要序列化与反序列化 我们知道,当两个进程进行远程通信时,可以相互发送各 ...

1.Java序列化与反序列化

Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程。

2.为什么需要序列化与反序列化

我们知道,当两个进程进行远程通信时,可以相互发送各种类型的数据,包括文本、图片、音频、视频等, 而这些数据都会以二进制序列的形式在网络上传送。那么当两个Java进程进行通信时,能否实现进程间的对象传送呢?答案是可以的。如何做到呢?这就需要Java序列化与反序列化了。换句话说,一方面,发送方需要把这个Java对象转换为字节序列,然后在网络
传送;另一方面,接收方需要从字节序列中恢复出Java对象。

当我们明晰了为什么需要Java序列化和反序列化后,我们很自然地会想Java序列化的好处。其好处一是实现了数据的持久化,通过序列化可以把数据永久地保存到硬盘上(通常存放在文件里),二是,利用序列化实现远程通信,即在网络上传送对象的字节序列。

3.示例:
(1)序列化反序列化文件:

  1. import java.io.*;
  2. @SuppressWarnings("serial")
  3. class Person implements Serializable {
  4. public Person(String name, String sex, int age, int height) {
  5. this.name = name;
  6. this.sex = sex;
  7. this.age = age;
  8. this.height = height;
  9. }
  10. public String toString() {
  11. return "|" + this.name + "|" + this.sex + "|" + this.age + "|"
  12. + this.height + "|";
  13. }
  14. public String name;
  15. public String sex;
  16. public int age;
  17. public int height;
  18. }
  19. public class SerialTest {
  20. public static void main(String[] args) throws FileNotFoundException,
  21. IOException, ClassNotFoundException {
  22. Person p = new Person("Jim", "male", 28, 194);
  23. // 开始序列化
  24. ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(
  25. new File("myTest.txt")));
  26. oos.writeObject(p);
  27. // 反序列化
  28. ObjectInputStream ois = new ObjectInputStream(new FileInputStream(
  29. new File("myTest.txt")));
  30. Person p1 = (Person) ois.readObject();
  31. System.out.println(p1.toString());
  32. }
  33. }
复制代码


(2)XML反序列化成class:

  1. import java.io.*;
  2. import com.thoughtworks.xstream.XStream;
  3. import com.thoughtworks.xstream.io.xml.DomDriver;
  4. @SuppressWarnings("serial")
  5. class RoadInfo implements Serializable {
  6. public int id;
  7. public long MDN;
  8. public String NAME;
  9. public double LNG;
  10. public double LAT;
  11. public String ICON;
  12. }
  13. @SuppressWarnings("serial")
  14. class table_list implements Serializable {
  15. public String toString() {
  16. StringBuffer sb = new StringBuffer();
  17. for (RoadInfo r : sequence) {
  18. sb.append("|");
  19. sb.append(r.id);
  20. sb.append("|");
  21. sb.append(r.MDN);
  22. sb.append("|");
  23. sb.append(r.NAME);
  24. sb.append("|");
  25. sb.append(r.LNG);
  26. sb.append("|");
  27. sb.append(r.LAT);
  28. sb.append("|");
  29. sb.append(r.ICON);
  30. sb.append("|n");
  31. }
  32. return sb.toString();
  33. }
  34. public table_list(int count) {
  35. sequence = new RoadInfo[count];
  36. for (int i = 0; i < count; i++) {
  37. sequence[i] = new RoadInfo();
  38. }
  39. }
  40. public RoadInfo[] sequence;
  41. }
  42. public class XMLTest {
  43. /**
  44. * @param args
  45. */
  46. public static void main(String[] args) throws Exception {
  47. // TODO Auto-generated method stub
  48. StringBuffer sb = new StringBuffer();
  49. BufferedReader reader = new BufferedReader(new FileReader(new File(
  50. "friend_msg.xml")));
  51. while (true) {
  52. String s = reader.readLine();// 读一行
  53. if (s == null) {
  54. break;
  55. }
  56. sb.append(s);
  57. }
  58. XStream xs = new XStream(new DomDriver());
  59. table_list db = (table_list) xs.fromXML(sb.toString());
  60. System.out.println(db.toString());
  61. }
  62. }
复制代码

最新评论

小黑屋|在路上 ( 蜀ICP备15035742号-1 

;

GMT+8, 2025-5-4 02:16

Copyright 2015-2025 djqfx

返回顶部