Java transient关键字

来源:互联网 发布:超基因优化液txt 编辑:程序博客网 时间:2024/06/03 16:31

       Java的serialization提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的对象数据成员,我们不想用serialization机制来保存它。为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。transient是Java语言的关键字,用来表示一个域不是该对象串行化(将对象存储到介质(如文件、内存缓冲区等)中或是以二进制方式通过网络传输)的一部分。当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中,然而非transient型的变量是被包括进去的。(注意:static变量也可以被串行化的)

      先看下面的代码: 

public class LoggingInfo implements java.io.Serializable   {       private Date loggingDate = new Date();       private String uid;       private transient String pwd;             LoggingInfo(String user, String password)       {           uid = user;           pwd = password;       }       public String toString()       {           String password=null;           if(pwd == null)           {           password = "NOT SET";           }           else          {               password = pwd;           }           return "log info:" + "     user : " + uid + "     logging date : " + loggingDate.toString() + "     password: " + password;       }   }

 

public class TestLoggingInfo {public static void main(String[] args) {LoggingInfo logInfo = new LoggingInfo("kongzi", "kongzi123");   System.out.println("写入前-->" + logInfo.toString());   try  {      ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream("G:/ProgramFiles/logInfo.out"));      o.writeObject(logInfo);      o.close();}   catch(Exception e) {e.printStackTrace();System.out.println("写入logInfo.out文件出现错误!!!");}try  {      ObjectInputStream in =new ObjectInputStream(new FileInputStream("G:/ProgramFiles/logInfo.out"));      LoggingInfo logInfoIn = (LoggingInfo)in.readObject();      System.out.println("读出后-->" + logInfoIn.toString());   }   catch(Exception e) {e.printStackTrace();System.out.println("读logInfo.out文件出现错误!!!");} }}


运行结果是:

这是当我们定义pwd域为transient时,所期望的正确结果。

转载自:http://www.blogjava.net/fhtdy2004/archive/2009/06/20/286112.html