Serialization, ObjectOutputStream

Kategori: Java , 18 Temmuz 2019 , JanFranco


Yazdığımız sınıflardan türettiğimiz objeleri bir dosyada saklayabiliriz. Bir objeyi byte olarak diske yazmaya Serialization, disketi bir dosyayı byte olarak bir objeye çevirmeye Deserialization denmektedir. Student adında bir sınıf açalım ve bu sınıftan ürettiğimiz objeleri diskte kaydedelim:


import java.io.Serializable;

public class Student implements Serializable {

	private static final long serialVersionUID = 1000;
	private String name, department;
	private int studentNo;
	
	public Student(String name, String department, int studentNo) {
		this.name = name;
		this.department = department;
		this.studentNo = studentNo;
	}

	@Override
	public String toString() {
		return "Student [name=" + name + ", department=" + department + ", studentNo=" + studentNo + "]";
	}
	
}
Objelerini diske yazacağımız sınıfın mutlaka Serializable Interfacesini implemente etmesi gerekir. Bunun dışında yukarıda serialVersionUID şeklinde bir değişken görüyoruz. Bu değişken static ve final olmak zorunda. Örneğin sürüm 1000 iken dosyaya yazdırdık, daha sonra programa ekstra bir özellik ekledik (eklemesek de olur) ve sürümünü yükseltip 2000 yaptık. Yazdırdığımız dosyayı okumak istersek direk IOException hatası oluşur. Eğer IOException'ı yakalamazsak, Java konsolda bize serialVersionUID hakkında hata verir. serialVersionUID = 2000 but in the file serialVersionUID = 1000 gibi. Şimdi Main_class'tan objeler oluşturalım ve diske yazalım:

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

public class Main_class {
	
	public static void main(String[] args){
		
		try(ObjectOutputStream output = new ObjectOutputStream(new FileOutputStream("C:\\Users\\ErenS\\Desktop\\student.bin"))){
			
			Student s1 = new Student("Jan Franco", "Computer Science", 1111);
			Student s2 = new Student("Jane Franco", "Dentistry", 9999);
			
			output.writeObject(s1);
			output.writeObject(s2);
			
			
		} catch (FileNotFoundException e) {
			System.out.println("File not found.");
		} catch (IOException e) {
			System.out.println("IOException. Please check the version.");
		}
		
	}
	
}
Burada try with resources yapısını kullandık. Bir objeyi diske yazabilmek için ObjectOutputStream sınıfından bir obje oluşturduk. Checked bir exception olduğundan FileNotFoundException ve IOException hatalarını yakalamamız uyarısını verdi ve catch bloklarını ekledik. Bu işlemler sonucunda masaüstünde student.bin şeklinde bir dosya kaydedildi. Bu dosyayı bir sonraki yazıda Deserialization ile memory'e yazıp okuyacağız.


Sonraki Yazı: Serialization, ObjectInputStream
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın