首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

兑现Serializable接口到底什么用啊

2011-11-16 
实现Serializable接口到底什么用啊?下面是个书上的小例子,如果没有实现Serializable和实现了有什么区别么?

实现Serializable接口到底什么用啊?
下面是个书上的小例子,如果没有实现Serializable和实现了有什么区别么?

附小程序:
import   java.io.*;
import   java.util.*;

class   ObjectFileTest
{    
      public   static   void   main(String[]   args)
      {    
            Manager   boss   =   new   Manager( "Carl   Cracker ",   80000,   1987,   12,   15);
            boss.setBonus(5000);

            Employee[]   staff   =   new   Employee[3];

            staff[0]   =   boss;
            staff[1]   =   new   Employee( "Harry   Hacker ",   50000,   1989,   10,   1);
            staff[2]   =   new   Employee( "Tony   Tester ",   40000,   1990,   3,   15);
           
            try
            {    
                  //   save   all   employee   records   to   the   file   employee.dat
                  ObjectOutputStream   out   =   new   ObjectOutputStream(new   FileOutputStream( "employee.dat "));
                  out.writeObject(staff);
                  out.close();

                  //   retrieve   all   records   into   a   new   array
                  ObjectInputStream   in   =     new   ObjectInputStream(new   FileInputStream( "employee.dat "));
                  Employee[]   newStaff   =   (Employee[])   in.readObject();
                  in.close();

                  //   print   the   newly   read   employee   records
                  for   (Employee   e   :   newStaff)
                        System.out.println(e);
            }
            catch   (Exception   e)
            {    
                  e.printStackTrace();  
            }
      }
}

class   Employee   implements   Serializable
{
      public   Employee()   {}

      public   Employee(String   n,   double   s,   int   year,   int   month,   int   day)
      {    
            name   =   n;
            salary   =   s;
            GregorianCalendar   calendar   =   new   GregorianCalendar(year,   month   -   1,   day);


            hireDay   =   calendar.getTime();
      }

      public   String   getName()
      {    
            return   name;
      }

      public   double   getSalary()
      {    
            return   salary;
      }

      public   Date   getHireDay()
      {    
            return   hireDay;
      }

      public   void   raiseSalary(double   byPercent)
      {    
            double   raise   =   salary   *   byPercent   /   100;
            salary   +=   raise;
      }

      public   String   toString()
      {    
            return   getClass().getName()
                  +   "[name= "   +   name
                  +   ",salary= "   +   salary
                  +   ",hireDay= "   +   hireDay
                  +   "] ";
      }

      private   String   name;
      private   double   salary;
      private   Date   hireDay;
}

class   Manager   extends   Employee
{    
      /**
            @param   n   the   employee 's   name
            @param   s   the   salary
            @param   year   the   hire   year
            @param   month   the   hire   month
            @param   day   the   hire   day
      */
      public   Manager(String   n,   double   s,   int   year,   int   month,   int   day)
      {    
            super(n,   s,   year,   month,   day);
            bonus   =   0;
      }

      public   double   getSalary()
      {  
            double   baseSalary   =   super.getSalary();
            return   baseSalary   +   bonus;
      }

      public   void   setBonus(double   b)
      {    
            bonus   =   b;
      }

      public   String   toString()
      {


            return   super.toString()
                +   "[bonus= "   +   bonus
                +   "] ";
      }

      private   double   bonus;
}


[解决办法]
Serializable只是一个标识,没有方法,所以有没有implements Serializable类本身没什么太大的变化(除了继承声明以外),它只是告诉虚拟机可以用默认的序列化机制来序列化此类。
当然你也可以自己写readObject, writeObject方法,自己来实现序列化。
你可以搜索Google,有很多这方面的介绍。
[解决办法]
什么叫做可以序列化

这个问题就不用在这里问吧,
你也太懒了, 随便一本基本的Java书上都会讲序列化.

你写的这个例子在 < <Core Java> > ( < <Java 核心技术> > ) 上面有, 这本书上就有很详细的解释.

[解决办法]
在网络上可以以流的形式传输
[解决办法]
实现此接口 即可进行 流 的传输
[解决办法]
使网络能够传输对象
[解决办法]
实现了serializable就可以实现对象的序列化

热点排行