Sponsor Reklam 


23.09.2008 (21:02)

 transient Anahtar Sözcüğü, Keyword 
transient çok nadir kullanımı olan, güvenlik amaçlı düşünülmüş bir anahtar sözcüktür. Bir sınıfa ait değişkenler transient belirteci ile belirtilir ise o sınıfa ait bir nesne üretilip kaydedildiğinde (depolandığında) o nesnedeki bu değişkenlerin içeriği kaydedilmeyebilmektedir.  Başka değişle JVM'nin düşük seviye bir parçasıdır, nesnenin kalıcı bir parçası değildir. Bu kelimenin Türkçe karşılığı zaten geçici-fani şeklindedir ve açıklayıcıdır.

Nesne serileştirmenin (object serialization) kontrolü sırasında, serileştirme mekanizmasının genellikle güvenlik sebepleriyle nesnenin bir kısmının kaydedilmesi bu sayde önlenmektedir. Serileşen nesne eski haline getirildiğinde bu parçalara amaçlandığı gibi ulaşılamayacaktır. Bu nedenle transient'i kullanırken dikkatli davranmak gerekmektedir.

Şu örnekte bir object için yapılan serileştirmede kaydedilen object geri getirildiğinde görüleceği üzere transient ile belirtilen değişkenin null değer olarak döndüğü, yani saklanmadığı görülecektir:

Bilgileri tutan Kayıt sınıfımız:

package kodcu.net;

public class Kayit implements java.io.Serializable {

  private int userid;
  private String username;
  private transient String password;

  // Constructor
  Kayit(int userid, String username, String password) {
    this.userid = userid;
    this.username = username;
    this.password = password;
  }

  /**
  * Bilgileri yaziya cevirir
  * @return String
  */

  public String toString() {
    if (password == null) {
      password = "YOK!";
    }
    return ("User ID: " + userid + ", Username: " + username + ", Password: " + password);
  }

}

Ana sınıfımız:

package kodcu.net;

import java.io.ObjectOutputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.FileInputStream;

public class Main() {

  public static void main(String[] args) {
    // Nesnemizi oluşturalım
    Kayit kayit = new Kayit(1, "admin", "123456");
    // Şimdiki bilgileri yazdıralım
    System.out.println(kayit.toString());
    try {
      // Kayıtımızı saklayalım
      ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("kayit.out"));
      oos.writeObject(kayit);
      oos.close();
      // Şimdi de geri getirelim
      ObjectInputStream ois =new ObjectInputStream(new FileInputStream("kayit.out"));
      kayit = (Kayit) ois.readObject();
      // Bilgilerin son halini yazdıralım
      System.out.println(kayit.toString());
    } catch (Exception e) {
      e.printStackTrace();
    } 
  }

}

Elde edilecek çıktı şu şekildedir:

User ID: 1, Username: admin, Password: 123456
User ID: 1, Username: admin, Password: YOK!

transient değişken olan password'ün değeri saklanmadığı için elde edilememiştir.
Imza: admin








Yazilar kaynak gosterilmeden kopyalanamaz © www.kodcu.net // Twitter