Ticker

6/random/ticker-posts

Java Transient Nedir?

 

Java'da transient anahtar kelimesi kullanımı
Java'da transient anahtar kelimesi kullanımı

Java'da transient anahtar kelimesi nedir? Ne işe yarar? Nasıl kullanılır? Örnek kodlarla açıklamaya çalışalım.

Kelime anlamı geçici, fani olan transient anahtar kelimesi, önüne geldiği veri alanının serileştirme (serialization) işleminden muaf tutulmasını ve verinin dosyaya keydedilmemesini sağlar.

Bir yemek siparişi senaryosu ile kod örneği oluşturalım. Aşağıdaki gibi MealOrder.java isimli bir veri sınıfımız olsun. Siparişin yemek adı, fiyatı ve siparişi kimin verdiği bilgilerini tutsun. Kişisel verileri koruma kanunu bağlamında bir MealOrder sınıfını dosyaya kaydederken yemeği kimin sipariş verdiği bilgisini yazmak istemiyoruz. Bu nedenle personOrderedTheMeal alanını transient tanımlıyoruz.


import java.io.Serializable;
import java.math.BigDecimal;

public class MealOrder implements Serializable {

	private String meal;
	
	private BigDecimal price;	
	
	private transient String personOrderedTheMeal;

	public String getMeal() {
		return meal;
	}

	public void setMeal(String meal) {
		this.meal = meal;
	}

	public BigDecimal getPrice() {
		return price;
	}

	public void setPrice(BigDecimal price) {
		this.price = price;
	}

	public String getPersonOrderedTheMeal() {
		return personOrderedTheMeal;
	}

	public void setPersonOrderedTheMeal(String personOrderedTheMeal) {
		this.personOrderedTheMeal = personOrderedTheMeal;
	}
	
}

Java Object Serialization yeteneğini kullanarak örnek bir MealOrder nesnesi oluşturup dosyaya kaydedelim.

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.math.BigDecimal;

public class JavaTransientTutorialSerializer {

	public static void main(String[] args) {

		MealOrder mealOrder = new MealOrder();

		mealOrder.setMeal("Lahmacun");

		mealOrder.setPersonOrderedTheMeal("Hulki");

		mealOrder.setPrice(new BigDecimal(35.0));

		try {
			FileOutputStream fileOut = new FileOutputStream("mealOrder.ser");
			ObjectOutputStream out = new ObjectOutputStream(fileOut);
			out.writeObject(mealOrder);
			out.close();
			fileOut.close();
			System.out.printf("Serialized data is saved in mealOrder.ser");
		} catch (IOException i) {
			i.printStackTrace();
		}

	}
}

JavaTransientTutorialSerializer.java sınıfımızı çalıştırınca mealOrder.ser isimli bir dosyaya mealOrder nesnemizi serialized bir biçimde kaydedecek. transient anahtar kelimesini kullandığımız için personOrderedTheMeal alanının kaydedilmemesini bekliyoruz. 

Aşağıdaki deserialize kodunu çalıştırarak mealOrder.ser dosyamızı tekrar okuyup nesneye çevirelim. personOrderedTheMeal alanında bilgi bulunmadığını bir kez daha teyit edelim.

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;

public class JavaTransientTutorialDeserializer {

	public static void main(String[] args) {
		
		MealOrder mealOrder = null;
		
		try {
	         FileInputStream fileIn = new FileInputStream("mealOrder.ser");
	         ObjectInputStream in = new ObjectInputStream(fileIn);
	         mealOrder = (MealOrder) in.readObject();
	         in.close();
	         fileIn.close();
	         
	         System.out.println("Meal: " + mealOrder.getMeal() );
	         System.out.println("Person: " + mealOrder.getPersonOrderedTheMeal());
	         System.out.println("Price " + mealOrder.getPrice());
	         
	      } catch (IOException i) {
	         i.printStackTrace();
	         return;
	      } catch (ClassNotFoundException c) {
	         System.out.println("MealOrder class not found");
	         c.printStackTrace();
	         return;
	      }
	}
}

Önce JavaTransientTutorialSerializer.java dosyasını daha sonra da JavaTransientTutorialDeserializer.java sınıfını çalıştırdığımızda konsolda göreceğimiz output şu şekilde olacaktır:

>

Meal: Lahmacun
Person: null
Price 35

Beklediğimiz gibi personOrderedTheMeal bilgisi null geldi.

 

Yorum Gönder

0 Yorumlar