序列化与发序列化
来源:互联网 发布:煲耳机方法知乎 编辑:程序博客网 时间:2024/06/04 14:48
最近在做一个关于考试大数据日志分析的项目,在解决抽取试卷存放的问题中遇到需要对数据进行序列化和反序列化的问题,借此进一步了解序列化与反序列化的颜色。
序列化,简单的理解是说将对象转换成容易传输的格式的过程,把java对象转换成字节序列的过程,重要的作用是在传输和保存,保证数据的可传递性和完整性;反序列化,便是将字节对象恢复java对象的过程,重新构造成传输前的对象。
那么如何实现序列化与反序列化?
实现序列化首先需要序列化的类要实现了Serializable或Externalizable接口。需要被序列化的类实现Serializable接口,接口没有实现,implements Serializable是用来标注对象可以被序列化。然后使用一个输出流来构造一个ObjectOutputStream对象,接着使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。
具体地说:序列化首先创建一个对象输出流,可以包装一个其它类型的目标输出流,例如文件输出流:
ObjectOutputStream out = new ObjectOutputStream(new fileOutputStream(“E:\\objectfile.obj”));其次,使用对象输出流的writeObject()方法写对象:
out.writeObject(“nihao”);out.writeObject(new Date());反序列则是将容易传输的格式回复成对象,步骤与序列化是类似的。首先,创建一个对象输入流,它可以包装一个其它类型输入流,如文件输入流:
ObjectInputStream in = new ObjectInputStream(new fileInputStream(“D:\\objectfile.obj”));其次,通过对象输出流的readObject()方法读取对象:
String objString = (String)in.readObject();Date objDate = (Date)in.readObject();用一张图形象描述这个过程如下:
进一步理解它们的含义和使用,下面用haspmap类型对象进行序列化与反序列化做说明:
public class test {//Jedis jedis = new Jedis("192.168.88.15",6379);public static void main(String args[]) { writer(); reader(); } public static void writer(){ Map<Integer,ExamPaper> exampapers=new HashMap<Integer,ExamPaper>(); exampapers.put(1, new ExamPaper("daxueyingyu")); exampapers.put(2, new ExamPaper("zhongguojindaishi")); File paperInfo = new File("paperInfo.txt"); ObjectOutputStream oos = null; try { oos = new ObjectOutputStream( new FileOutputStream(paperInfo)); oos.writeObject(exampapers); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ try { oos.flush(); oos.close(); } catch (IOException e) { e.printStackTrace(); } } } public static void reader(){ Map<Integer,ExamPaper> exampapers= null; File paperInfo = new File("paperInfo.txt"); ObjectInputStream ois = null; try { ois = new ObjectInputStream(new FileInputStream(paperInfo)); Object o = ois.readObject(); exampapers = (Map<Integer,ExamPaper>)o; System.out.println(exampapers); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); }finally{ try { ois.close(); } catch (IOException e) { e.printStackTrace(); } } } }class ExamPaper implements Serializable{ ExamPaper(String name){ this.name = name; } private String name; @Override public String toString(){ return "ExamPaper name:"+name; }}至此,对它们是不是有初步的了解,深入的颜色需要我们进一步的探究。
0 0
- 序列化与发序列化
- 序列化与发序列化
- C#对JSON的序列化与发序列化
- 序列化和发序列化
- 浏览器与服务器交互信息(序列化与发序列化) ViewState
- 对象序列化字节流 与 字节流发序列化为对象
- c# 序列化和发序列化最经典例子
- 序列化与非序列化
- 反射与序列化
- transient与序列化
- 序列化与json
- 序列化与编码
- 序列化与编辑器
- transient与序列化
- transient与序列化
- 序列化与压缩
- 发个类似于Parcelable的序列化库SerializableParcelable
- 使用NewtonSoft.JSON.dll来序列化和发序列化对象
- AsyncTask--源码心得
- 第一篇博文,感谢主
- Appium自动化测试之Appium的安装与配置
- Sort Colors
- HBase中rowkey热点问题:
- 序列化与发序列化
- logstash nginx 报ArgumentError: comparison of String with 5 failed
- Jquery---层次选择器
- android 当中service的简单用法(用于消息推送)
- Structs2:映射通配符、动态方法调用
- SourceInsight使用心得汇总
- OpenCV erode()
- 关于开发工具环境准备事项作为故事来处理的对话
- Ubuntu下软件下载/安装/升级/卸载 —— Linux学习笔记(01)