logo

Java'da Serileştirme ve Seriden Çıkarma

  1. Serileştirme
  2. Serileştirilebilir Arayüz
  3. Serileştirme Örneği
  4. Seri durumdan çıkarma örneği
  5. Kalıtımla Serileştirme
  6. Dışsallaştırılabilir arayüz
  7. Serileştirme ve statik veri üyesi

Java'da serileştirme bir mekanizmadır bir nesnenin durumunu bayt akışına yazma . Ağırlıklı olarak Hibernate, RMI, JPA, EJB ve JMS teknolojilerinde kullanılmaktadır.

Serileştirmenin ters işlemine denir seri durumdan çıkarma bayt akışının bir nesneye dönüştürüldüğü yer. Serileştirme ve seri durumdan çıkarma işlemi platformdan bağımsızdır; bu, bir nesneyi bir platformda seri hale getirip farklı bir platformda seri durumdan çıkarabileceğiniz anlamına gelir.

Nesneyi serileştirmek için şunu çağırırız: writeObject() yöntemi NesneÇıktıAkışı sınıf ve seri durumdan çıkarma için biz diyoruz okumaObject() yöntemi Nesne Giriş Akışı sınıf.

Biz bunu hayata geçirmek zorundayız Serileştirilebilir nesneyi serileştirmek için arayüz.

Java Serileştirmenin Avantajları

Esas olarak ağdaki nesnenin durumunu (buna sıralama olarak bilinir) seyahat etmek için kullanılır.

java serileştirme

java.io.Serileştirilebilir arayüz

Serileştirilebilir bir işaretleyici arayüzüdür (veri üyesi ve yöntemi yoktur). Java sınıflarını 'işaretlemek' için kullanılır, böylece bu sınıfların nesneleri belirli bir yeteneğe sahip olabilir. Klonlanabilir Ve Uzak aynı zamanda işaretleyici arayüzlerdir.

Serileştirilebilir Arayüz, nesnesinin kalıcı olması gereken sınıf tarafından uygulanmalıdır.

Java'dan yazdır

String sınıfı ve tüm sarmalayıcı sınıfları, java.io.Serileştirilebilir varsayılan olarak arayüz.

Aşağıda verilen örneği görelim:

Öğrenci.java

birleştirme java dizesi
 import java.io.Serializable; public class Student implements Serializable{ int id; String name; public Student(int id, String name) { this.id = id; this.name = name; } } 

Yukarıdaki örnekte, Öğrenci sınıf Serileştirilebilir arayüzü uygular. Artık nesneleri akışa dönüştürülebilir. Ana sınıf uygulaması bir sonraki kodda gösterilmektedir.

ObjectOutputStream sınıfı

ObjectOutputStream sınıfı, ilkel veri türlerini ve Java nesnelerini bir OutputStream'e yazmak için kullanılır. Akışlara yalnızca Java.io.Serializable arayüzünü destekleyen nesneler yazılabilir.

Oluşturucu

1) public ObjectOutputStream(OutputStream out), IOException {}'ı atarBelirtilen OutputStream'e yazan bir ObjectOutputStream oluşturur.

Önemli Yöntemler

YöntemTanım
1) genel son void writeObject(Object obj), IOException {}'ı atarBelirtilen nesneyi ObjectOutputStream'e yazar.
2) public void floş(), IOException {}'ı atarMevcut çıkış akışını temizler.
3) public void close(), IOException {}'ı atarGeçerli çıkış akışını kapatır.

ObjectInputStream sınıfı

ObjectInputStream, ObjectOutputStream kullanılarak yazılan nesneleri ve ilkel verileri seri durumdan çıkarır.

Oluşturucu

1) public ObjectInputStream(InputStream in) IOException {}'ı atarBelirtilen OutputStream'den okuyan bir ObjectInputStream oluşturur.

Önemli Yöntemler

YöntemTanım
1) genel final Object readObject(), IOException, ClassNotFoundException{}'ı atarGiriş akışından bir nesneyi okur.
2) public void close(), IOException {}'ı atarObjectInputStream'i kapatır.

Java Serileştirme Örneği

Bu örnekte nesneyi seri hale getireceğiz. Öğrenci Yukarıdaki koddan sınıf. ObjectOutputStream sınıfının writeObject() yöntemi, nesneyi serileştirme işlevselliğini sağlar. Nesnenin durumunu f.txt isimli dosyaya kaydediyoruz.

Persist.java

kısmi türev lateks
 import java.io.*; class Persist{ public static void main(String args[]){ try{ //Creating the object Student s1 =new Student(211,'ravi'); //Creating stream and writing the object FileOutputStream fout=new FileOutputStream('f.txt'); ObjectOutputStream out=new ObjectOutputStream(fout); out.writeObject(s1); out.flush(); //closing the stream out.close(); System.out.println('success'); }catch(Exception e){System.out.println(e);} } } 

Çıktı:

 success 
bu serileştirme örneğini indirin

Java Seri Durumdan Çıkarma Örneği

Seri durumdan çıkarma, nesneyi serileştirilmiş durumdan yeniden yapılandırma işlemidir. Serileştirme işleminin tersidir. Seri durumdan çıkarılmış bir nesneden verileri okuduğumuz bir örneği görelim.

Seri durumdan çıkarma, nesneyi serileştirilmiş durumdan yeniden yapılandırma işlemidir. Serileştirme işleminin tersidir. Seri durumdan çıkarılmış bir nesneden verileri okuduğumuz bir örneği görelim.

Depersist.java

 import java.io.*; class Depersist{ public static void main(String args[]){ try{ //Creating stream to read the object ObjectInputStream in=new ObjectInputStream(new FileInputStream('f.txt')); Student s=(Student)in.readObject(); //printing the data of the serialized object System.out.println(s.id+' '+s.name); //closing the stream in.close(); }catch(Exception e){System.out.println(e);} } } 

Çıktı:

211 ravi 
bu seri durumdan çıkarma örneğini indirin

Kalıtımla Java Serileştirme (IS-A İlişkisi)

Bir sınıf uygularsa Serileştirilebilir arayüz o zaman tüm alt sınıfları da serileştirilebilir olacaktır. Aşağıda verilen örneği görelim:

ISA.java'yı seri hale getirin

java sunucu sayfaları
 import java.io.Serializable; class Person implements Serializable{ int id; String name; Person(int id, String name) { this.id = id; this.name = name; } } class Student extends Person{ String course; int fee; public Student(int id, String name, String course, int fee) { super(id,name); this.course=course; this.fee=fee; } } public class SerializeISA { public static void main(String args[]) { try{ //Creating the object Student s1 =new Student(211,'ravi','Engineering',50000); //Creating stream and writing the object FileOutputStream fout=new FileOutputStream('f.txt'); ObjectOutputStream out=new ObjectOutputStream(fout); out.writeObject(s1); out.flush(); //closing the stream out.close(); System.out.println('success'); }catch(Exception e){System.out.println(e);} try{ //Creating stream to read the object ObjectInputStream in=new ObjectInputStream(new FileInputStream('f.txt')); Student s=(Student)in.readObject(); //printing the data of the serialized object System.out.println(s.id+' '+s.name+' '+s.course+' '+s.fee); //closing the stream in.close(); }catch(Exception e){System.out.println(e);} } } 

Çıktı:

 success 211 ravi Engineering 50000 

SerializeISA sınıfı, Serileştirilebilir olan Person sınıfını genişleten Öğrenci sınıfı nesnesini serileştirdi. Ana sınıf özellikleri alt sınıflara miras alınır, dolayısıyla ana sınıf Serileştirilebilirse alt sınıf da öyle olur.

Toplamayla Java Serileştirme (HAS-A İlişkisi)

Bir sınıfın başka bir sınıfa referansı varsa tüm referansların Serileştirilebilir olması gerekir, aksi takdirde serileştirme işlemi yapılmayacaktır. Böyle bir durumda, Serileştirilebilir İstisna Değil çalışma zamanında atılır.

Adres.java

 class Address{ String addressLine,city,state; public Address(String addressLine, String city, String state) { this.addressLine=addressLine; this.city=city; this.state=state; } } 

Öğrenci.java

 import java.io.Serializable; public class Student implements Serializable{ int id; String name; Address address;//HAS-A public Student(int id, String name) { this.id = id; this.name = name; } } 

Adres Serileştirilebilir olmadığından Öğrenci sınıfının örneğini seri hale getiremezsiniz.

Not: Bir nesne içindeki tüm nesnelerin Serileştirilebilir olması gerekir.

Statik veri üyesiyle Java Serileştirme

Bir sınıfta herhangi bir statik veri üyesi varsa, serileştirilmeyecektir çünkü statik, nesnenin değil sınıfın bir parçasıdır.

java'da rastgele sayı nasıl oluşturulur

Çalışan.java

 class Employee implements Serializable{ int id; String name; static String company='SSS IT Pvt Ltd';//it won't be serialized public Student(int id, String name) { this.id = id; this.name = name; } } 

Dizi veya koleksiyonla Java Serileştirme

Kural: Dizi veya koleksiyon durumunda dizi veya koleksiyonun tüm nesneleri serileştirilebilir olmalıdır. Herhangi bir nesne serileştirilebilir değilse serileştirme başarısız olur.

Java'da dışsallaştırılabilir

Dışsallaştırılabilir arayüz, bir nesnenin durumunun sıkıştırılmış formatta bir bayt akışına yazılması olanağını sağlar. Bu bir işaretleyici arayüzü değildir.

Dışsallaştırılabilir arayüz iki yöntem sunar:

    public void writeExternal(ObjectOutput out), IOException'ı atar public void readExternal(ObjectInput in) IOException'ı atar

Java Geçici Anahtar Kelimesi

Bir sınıfın herhangi bir veri üyesini serileştirmek istemiyorsanız onu geçici olarak işaretleyebilirsiniz.

Çalışan.java

 class Employee implements Serializable{ transient int id; String name; public Student(int id, String name) { this.id = id; this.name = name; } } 

Artık id serileştirilmeyecek, dolayısıyla serileştirmeden sonra nesneyi seri durumdan çıkardığınızda id değerini alamayacaksınız. Her zaman varsayılan değeri döndürecektir. Bu durumda id veri tipi tamsayı olduğundan 0 değerini döndürür.

Daha fazla ayrıntı için sonraki sayfayı ziyaret edin.

Seri SürümUID

Çalışma zamanındaki serileştirme işlemi, SerialVersionUID olarak bilinen her Serileştirilebilir sınıfla bir kimliği ilişkilendirir. Serileştirilmiş nesnenin göndericisini ve alıcısını doğrulamak için kullanılır. Gönderici ve alıcı aynı olmalıdır. Bunu doğrulamak için SerialVersionUID kullanılır. Gönderici ve alıcı aynı SerialVersionUID'ye sahip olmalıdır; aksi takdirde, Geçersiz Sınıf İstisnası nesneyi seri durumdan çıkardığınızda atılacaktır. Ayrıca Serializable sınıfında kendi SerialVersionUID'mizi de bildirebiliriz. Bunu yapmak için SerialVersionUID alanını oluşturmanız ve ona bir değer atamanız gerekir. Statik ve final içeren uzun tipte olmalıdır. SeriVersionUID alanının sınıfta açıkça bildirilmesi ve ayrıca özel olması önerilir. Örneğin:

 private static final long serialVersionUID=1L; 

Artık Serileştirilebilir sınıf şöyle görünecek:

Çalışan.java

 import java.io.Serializable; class Employee implements Serializable{ private static final long serialVersionUID=1L; int id; String name; public Student(int id, String name) { this.id = id; this.name = name; } }