Java Transient关键字与示例

时间:2020-02-23 14:35:16  来源:igfitidea点击:

Transient(瞬时)变量是在序列化期间未序列化的变量。

当我们将其进行反序列化时,我们将获得这些变量的默认值。

让我们说你有国家级,你不想序列化人口属性随着时间的变化,因此我们可以将群体属性声明为暂行,它不会再序列化。

Transient关键字示例:

创建一个名为country.java的类:

package org.igi.theitroad;
 
import java.io.Serializable;
 
public class Country implements Serializable {  
  
 String name;  
 transient long population;  
   
 
 public Country() {
 super();
}
public Country(String name, long population) {  
  super();  
  this.name = name;  
  this.population = population;  
 }  
 public String getName() {  
  return name;  
 }  
 public void setName(String name) {  
  this.name = name;  
 }  
 public long getPopulation() {  
  return population;  
 }  
 public void setPopulation(long population) {  
  this.population = population;  
 }
    
}

创建SerializationMain.java如下:

package org.igi.theitroad;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
 
public class SerializeMain {
 
 /**
  * @author igi Mandliya
  */
 public static void main(String[] args) {
 
  Country Netherlands = new Country();
 Netherlands.setName("Netherlands");
 Netherlands.setPopulation(100000);
  try
  {
   FileOutputStream fileOut = new FileOutputStream("country.ser");
   ObjectOutputStream outStream = new ObjectOutputStream(fileOut);
   outStream.writeObject(Netherlands);
   outStream.close();
   fileOut.close();
  }catch(IOException i)
  {
   i.printStackTrace();
  }
  
  System.out.println("serialized");
 }
}

运行上面的程序时,我们将得到以下输出:

serialized

现在创建一个名为deserializemain.java的被归类为下面的:

package org.igi.theitroad;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
 
public class DeserializeMain {
 /**
  * @author igi Mandliya
  */
 public static void main(String[] args) {
  
  Country Netherlands = null;
       try
       {
          FileInputStream fileIn =new FileInputStream("country.ser");
          ObjectInputStream in = new ObjectInputStream(fileIn);
          Netherlands = (Country) in.readObject();
          in.close();
          fileIn.close();
       }catch(IOException i)
       {
          i.printStackTrace();
          return;
       }catch(ClassNotFoundException c)
       {
          System.out.println("Country class not found");
          c.printStackTrace();
          return;
       }
       System.out.println("Deserialized Country...");
       System.out.println("Country Name : " + Netherlands.getName());
       System.out.println("Population : " + Netherlands.getPopulation());
       
 }
}

运行上面的程序时,我们将得到以下输出:

Deserialized Country...
Country Name : Netherlands
Population : 0

正如我们可以在上面的例子中看到的,我们已将人口声明为初始,因此在反序列化之后,其值为0(长期默认值)