Serializable:用于保存及还原对象——《Thinking in Java》随笔031

  1 //: Worm.java
  2 package c10;
  3
  4 import java.io.ByteArrayInputStream;
  5 import java.io.ByteArrayOutputStream;
  6 import java.io.FileInputStream;
  7 import java.io.FileOutputStream;
  8 import java.io.ObjectInputStream;
  9 import java.io.ObjectOutputStream;
 10 import java.io.Serializable;
 11
 12 /**
 13 *    @time:         上午10:35:14
 14 *    @date:         2017年5月1日
 15 *    @auther:    skyfffire
 16 *    @version:    v0.1
 17 */
 18 class Data implements Serializable {
 19     private static final long serialVersionUID =
 20             -1235946666506705202L;
 21
 22     private int i;
 23
 24     Data(int x) {
 25         i = x;
 26     }
 27
 28     public String toString() {
 29         return Integer.toString(i);
 30     }
 31 }
 32
 33 public class Worm implements Serializable {
 34     private static final long serialVersionUID =
 35             7755684981500799364L;
 36
 37     private static int r() {
 38         return (int)(Math.random() * 10);
 39     }
 40
 41     private Data[] d =
 42         {new Data(r()), new Data(r()), new Data(r())};
 43     private Worm next = null;
 44     private char c;
 45
 46     Worm(int i, char x) {
 47         System.out.println("Worm constructor:" + i);
 48
 49         c = x;
 50
 51         if (--i > 0) {
 52             next = new Worm(i, (char)(x + 1));
 53         }
 54     }
 55
 56     Worm() {
 57         System.out.println("Default constructor.");
 58     }
 59
 60     public String toString() {
 61         StringBuffer s = new StringBuffer(" " + c + "(");
 62
 63         for (int i = 0; i < d.length; i++) {
 64             s.append(d[i].toString());
 65         }
 66
 67         s.append(‘)‘);
 68
 69         if (next != null) {
 70             s.append(next.toString());
 71         }
 72
 73         return s.toString();
 74     }
 75
 76     public static void main(String[] args) {
 77         Worm w = new Worm(6, ‘a‘);
 78
 79         System.out.println("w = " + w);
 80
 81         // Object IO Stream
 82         try {
 83             // Output
 84             ObjectOutputStream out = new ObjectOutputStream(
 85                     new FileOutputStream("worm.out"));
 86             out.writeObject("Worm storage");
 87             out.writeObject(w);
 88             out.close();
 89
 90             // Input
 91             ObjectInputStream in = new ObjectInputStream(
 92                     new FileInputStream("worm.out"));
 93             String s = (String)in.readObject();
 94             Worm w2 = (Worm)in.readObject();
 95             System.out.println(s + ", w2 = " + w2);
 96             in.close();
 97         } catch (Exception e) {
 98             e.printStackTrace();
 99         }
100
101         // Byte IO Stream
102         try {
103             // Output
104             ByteArrayOutputStream bout =
105                     new ByteArrayOutputStream();
106             ObjectOutputStream out =
107                     new ObjectOutputStream(bout);
108             out.writeObject("Worm storage");
109             out.writeObject(w);
110             out.flush();
111
112             // Input
113             ByteArrayInputStream bin =
114                     new ByteArrayInputStream(bout.toByteArray());
115             ObjectInputStream in =
116                     new ObjectInputStream(bin);
117             String s = (String)in.readObject();
118             Worm w3 = (Worm)in.readObject();
119             System.out.println(s + ", w3 = " + w3);
120
121             // close IO stream
122             in.close();
123             out.close();
124         } catch (Exception e) {
125             e.printStackTrace();
126         }
127     }
128 }
129
130 ///:~

输出结果:

Worm constructor:6
Worm constructor:5
Worm constructor:4
Worm constructor:3
Worm constructor:2
Worm constructor:1
w = a(842) b(627) c(504) d(753) e(709) f(651)
Worm storage, w2 = a(842) b(627) c(504) d(753) e(709) f(651)
Worm storage, w3 = a(842) b(627) c(504) d(753) e(709) f(651)

可以看到,实现了Serializable接口的类可以将对象转换为数据流并还原。

序列化(Serializable)可以说是Java中超级重要的东西了。

时间: 2024-10-24 15:28:00

Serializable:用于保存及还原对象——《Thinking in Java》随笔031的相关文章

Android SharedPreferences保存和读取对象

SharedPreferences保存和读取对象 1.首先要序列化对象(以下是序列化实体类的样例,不方便贴出实体类全部的代码) public class LoginResult extends BaseResult implements Serializable{ private static final long serialVersionUID = 1L; private String mobiletoken; 2.保存和读取对象的封装 public class ObjectSaveUtil

未能加载视图状态。正在向其中加载视图状态的控件树必须与前一请求期间用于保存视图状态的控件树相匹配。例如,当以动态方式添加控件时,在回发期间添加的控件必须与在初始请求期间添加的控件的类型和位置相匹配

信息: 未能加载视图状态.正在向其中加载视图状态的控件树必须与前一请求期间用于保存视图状态的控件树相匹配.例如,当以动态方式添加控件时,在回发期间添加的控件必须与在初始请求期间添加的控件的类型和位置相匹配. 数据源: System.Web 堆栈信息: 在 System.Web.UI.Control.LoadViewStateRecursive(Object savedState) 在 System.Web.UI.Control.LoadChildViewStateByIndex(ArrayLis

监听器[用于监听ServletRequest对象的产生和销毁] 学习笔记

import javax.servlet.ServletRequestEvent; import javax.servlet.ServletRequestListener; //监听器[用于监听ServletRequest对象的产生和销毁] public class MyServletRequestListener implements ServletRequestListener { //产生 public void requestInitialized(ServletRequestEvent

比较任意两个JSON串是否相等(比较对象是否相等)JAVA版

废话少说,直接入题. 在面向对象语言中,经常会比较两个对象是否相等,而比较的大多是实体类实例,也就是封装数据的那些类实例,或者是Map.List互相嵌套成的复杂数据结构. 比较对象是否相等,常见的思路是重写equals方法,但鉴于对象的种类多变,嵌套层次复杂,仅仅靠重写equals是很难实现的. 小菜的思路是可以把对象序列化,由于这些对象均是用来表达数据结构,因此可以直接转换成JSON字符串,用字符串来描述数据结构,避免实现Serializable接口.将对象序列化成字符串后,比较是否相等就相对

201771010135杨蓉庆 《面对对象程序设计(java)》第九周学习总结

第7章 异常.日志.断言和调试 1.实验目的与要求 (1) 掌握java异常处理技术: (2) 了解断言的用法: (3) 了解日志的用途: (4) 掌握程序基础调试技巧: 一.理论知识 1.异常:在程序的执行过程中所发生的异常事件,它 中断指令的正常执行. 2.Java的异常处理机制可以控制程序从错误产生的 位置转移到能够进行错误处理的位置. 3.异常分类:Java把程序运行时可能遇到的错误分为两类: –非致命异常:通过某种修正后程序还能继续执行. 这类错误叫作异常.如:文件不存在.无效的数组

学习java随笔第七篇:java的类与对象

类 同一个包(同一个目录),类的创建与调用 class Man{ String name; void GetMyName() { System.out.println(name); } } public class Person { public static void main(String arges[]) { Man m=new Man(); m.name="小黄"; m.GetMyName(); } } 运行结果 不同的包(不同目录目录),类的创建与调用 package Peo

【代码分享——Java&amp;Json】Json转成java对象,已经java对象转成Json对象

做记录用,肯定有地方不完整,先放着吧 [代码分享--Java&Json]Json转成java对象,已经java对象转成Json对象,布布扣,bubuko.com

json字符串转json对象,json对象转换成java对象

@RequestMapping(value = "updateInvestorApplyAccountNo", method = RequestMethod.POST) @ResponseBody public void updateInvestorApplyAccountNo(HttpServletRequest request, HttpServletResponse response, @RequestBody String requestBody) { int num = 0;

json字符串转成 json对象 json对象转换成java对象

import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject; 依赖包 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.54</version></dependency> String r