- Serileştirme
- Serileştirilebilir Arayüz
- Serileştirme Örneği
- Seri durumdan çıkarma örneği
- Kalıtımla Serileştirme
- Dışsallaştırılabilir arayüz
- 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.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 {}'ı atar | Belirtilen OutputStream'e yazan bir ObjectOutputStream oluşturur. |
Önemli Yöntemler
Yöntem | Tanım |
---|---|
1) genel son void writeObject(Object obj), IOException {}'ı atar | Belirtilen nesneyi ObjectOutputStream'e yazar. |
2) public void floş(), IOException {}'ı atar | Mevcut çıkış akışını temizler. |
3) public void close(), IOException {}'ı atar | Geç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 {}'ı atar | Belirtilen OutputStream'den okuyan bir ObjectInputStream oluşturur. |
Önemli Yöntemler
Yöntem | Tanım |
---|---|
1) genel final Object readObject(), IOException, ClassNotFoundException{}'ı atar | Giriş akışından bir nesneyi okur. |
2) public void close(), IOException {}'ı atar | ObjectInputStream'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ı:
successbu 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 ravibu 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:
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; } }