A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 常帅 黑马帝   /  2011-7-23 16:44  /  3360 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

序列化和反序列化的是什么意思。最好说下用途和关键代码…

评分

参与人数 1技术分 +1 收起 理由
小龙 + 1 等待童鞋们的回答吧!

查看全部评分

4 个回复

正序浏览
黑马网友  发表于 2011-7-24 01:02:04
报纸
对象序列化(Serializable)是指将对象转换为字节序列的过程,而反序列化则是根据字节序列恢复对象的过程。
通过序列化可以永久性保存对象到本地文件中,也可以在网络中和进程间传递对象;

ObjectOutputStream代表对象输出流,其方法writeObject(Object obj)可以实现对象的序列化,将得到的字节序列写到目标输出流中。ObjectInputStream代表对象输入流,其readObject()方法能从源输入流中读取字节序列,将其反序列化为对象,并将其返回。

序列化一个对象非常之简单,仅仅实现一下Serializable接口即可,它调用自身预定义的默认序列化机制;如果不让系统使用缺省的方式进行序列化,那就必须在实现Serializable接口的同时还定义了私有的readObject()或writeObject()方法。
        public class MySerial implements java.io.Serializable {
          private void writeObject(java.io.ObjectOutputStream out) throws IOException
          { //... } //对对象的非transient的实例变量进行序列化
          private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException
          { //... } //对对象的非transient的实例变量进行反序列化。
          //...
        }  
共同学习!!!

评分

参与人数 1技术分 +2 收起 理由
小龙 + 2

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-23 19:59:35
板凳
序列化之后,可以用来保存到硬盘。下次运行程序可以直接读取上次保存的数据

评分

参与人数 1技术分 +1 收起 理由
小龙 + 1 只能给一分!

查看全部评分

回复 使用道具 举报
对象的序列化指将一个java对象写入io流中,与此对应的反序列化则是指从io流中恢复该java对象.如果需要让某个对象可以支持序列化,必须让它的类是可序列化的,即必须实现如下两个接口之一:
1 Serializable
2 Externalizable
例如:
import java.io.Serializable;
public class Person implements Serializable
{
        private String name = null;
        private int age = 0;
        public Person(String name,int age)
        {
                this.name = name;
                this.age = age;
        }
        public int getAge()
        {
                return age;
        }
}
import java.io.*;
public class TestSerializable
{
        public static void main(String[] args)
        {
                ObjectOutputStream oos = null;
                ObjectInputStream ois=null;
                try
                {
                        oos = new ObjectOutputStream(new FileOutputStream("textperson.txt"));               
                        Person p = new Person("孙悟空",20);
                            oos.writeObject(p);
                            oos.close();
                        ois = new ObjectInputStream(new FileInputStream("textperson.txt"));
                        Person per = (Person) ois.readObject();
                        System.out.println(per.getAge());
                            ois.close();
                }
                catch (IOException ioe)
                {
                        ioe.printStackTrace();
                }
                catch(ClassNotFoundException cfe)
                {
                        cfe.printStackTrace();
                }
               
        }
}
[ 本帖最后由 包志恒 于 2011-07-23  18:15 编辑 ]

评分

参与人数 1技术分 +2 收起 理由
小龙 + 2 辛苦了!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-23 17:16:51
沙发
可以写入输出流的对象称为可序列化对象,可序列化对象所属的类称为可序列化类,可序列化类必须实现接口java.io.Serializable.自动执行存储对象的过程,这种自动写对象的过程为对象序列化,它通过类objectoutputstream实现,相反为对象反序列化,它通过类objectinputstream实现。
class Login implements.java.io.Serializable{
privte String name;
private  transient String password; //对象序列化
.......
}
class A{}     //非序列化
class B implements .java.io.Serializable{
private int   i;
private static double  d;
private A a=new A();
}

上述类B对象是不可序列化的,如果试图序列化一个非序列化得对象,必须使用关键字transient关闭数据成员a的序列化。如下:
class B implements .java.io.Serializable{
private int   i;
private static double  d;
private transient   A  a=new A();
}

评分

参与人数 1技术分 +2 收起 理由
小龙 + 2 还行!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马