黑马程序员技术交流社区

标题: 序列化 [打印本页]

作者: 周一川    时间: 2013-4-14 10:23
标题: 序列化
什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用。

作者: zhuiyi0819    时间: 2013-4-14 10:29
Java 串行化技术可以使你将一个对象的状态写入一个Byte 流里,并且可以从其它地方把该Byte 流里的数据读出来,重新构造一个相同的对象。这种机制允许你将对象通过网络进行传播,并可以随时把对象持久化到数据库、文件等系统里。Java的串行化机制是RMI、EJB等技术的技术基础。用途:利用对象的串行化实现保存应用程序的当前工作状态,下次再启动的时候将自动地恢复到上次执行的状态。
序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。
序列化的实现:将需要被序列化的类实现Serializable接口,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。
作者: ①人←①城市    时间: 2013-4-14 10:37
Java中,一切都是对象,在分布式环境中经常需要将Object从这一端网络或设备传递到另一端。
这就需要有一种可以在两端传输数据的协议。Java序列化机制就是为了解决这个问题而产生。

一个对象能够序列化的前提是实现Serializable接口,Serializable接口没有方法,更像是个标记。
有了这个标记的Class就能被序列化机制处理。

Serialization(序列化)是一种将对象以一连串的字节描述的过程;反序列化deserialization是一种将这些字节重建成一个对象的过程。Java序列化API提供一种处理对象序列化的标准机制。在这里你能学到如何序列化一个对象,什么时候需要序列化以及Java序列化的算法,我们用一个实例来示范序列化以后的字节是如何描述一个对象的信息的。
作者: PANZERLEADER    时间: 2013-4-16 16:19
写了个简单代码演示了一下序列化的用途;
参考一下;
  1. package test.bean;

  2. import java.io.Serializable;

  3. public class SerializableBean implements Serializable{
  4.         private static final long serialVersionUID = 1L;
  5.         private String test;

  6.         public String getTest() {
  7.                 return test;
  8.         }

  9.         public void setTest(String test) {
  10.                 this.test = test;
  11.         }
  12.        
  13. }
复制代码
注意必须实行序列化接口;

测试类;
  1. package test.bean;

  2. import java.io.FileInputStream;
  3. import java.io.FileNotFoundException;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.io.ObjectInputStream;
  7. import java.io.ObjectOutputStream;

  8. public class FoutSerialiable {
  9.         public static final String path = "c:\\1.txt";

  10.         public static void main(String[] args) throws IOException {
  11.                 /** 序列化到本地代码 */
  12.                 SerializableBean bean = new SerializableBean();
  13.                 bean.setTest("PANZERLEADER");
  14.                 writeObject(bean);
  15.                 /**
  16.                  ** 读序列化1.txt代码 SerializableBean bean = readObject();
  17.                  * System.out.println(bean.getTest());
  18.                  */
  19.         }

  20.         public static SerializableBean readObject() {
  21.                 ObjectInputStream in = null;
  22.                 try {
  23.                         in = new ObjectInputStream(new FileInputStream(path));
  24.                         return (SerializableBean) in.readObject();

  25.                 } catch (IOException e) {
  26.                         e.printStackTrace();
  27.                 } catch (ClassNotFoundException e) {
  28.                         // TODO Auto-generated catch block
  29.                 } finally {
  30.                         if (in != null) {
  31.                                 try {
  32.                                         in.close();
  33.                                 } catch (IOException e) {
  34.                                         e.printStackTrace();
  35.                                 }
  36.                         }
  37.                 }

  38.                 return null;
  39.         }

  40.         public static void writeObject(SerializableBean bean) {
  41.                 ObjectOutputStream out = null;
  42.                 try {
  43.                         out = new ObjectOutputStream(new FileOutputStream(path));
  44.                         out.writeObject(bean);
  45.                 } catch (FileNotFoundException e) {
  46.                         // TODO Auto-generated catch block
  47.                         e.printStackTrace();
  48.                 } catch (IOException e) {
  49.                         // TODO Auto-generated catch block
  50.                         e.printStackTrace();
  51.                 } finally {
  52.                         if (out != null)
  53.                                 try {
  54.                                         out.close();
  55.                                 } catch (IOException e) {
  56.                                         e.printStackTrace();
  57.                                 }
  58.                 }
  59.         }

  60. }
复制代码
先运行后查看c盘目录1.txt,你会发现
 sr 32test.bean.SerializableBean        L testt Ljava/lang/String;xpt PANZERLEADER

然后读取,你会发现对象其实已经被你写到了文件中···感谢,看到希望有用,谢谢
作者: 谷文仁    时间: 2013-4-16 17:40
楼主穿条内裤就出来了..{:soso_e113:}
作者: 〃Mr.Zぐ    时间: 2013-4-22 15:04
序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。

   序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2