20 Haziran 2018 Çarşamba

ObjectOutputStream Sınıfı

Giriş
Şu satırı dahil ederiz.
import java.io.ObjectOutputStream;
Yazılacak nesnenin Serializable arayüzünü gerçekleştirmesi gerekir. Açıklaması şöyle.
Only objects that support the java.io.Serializable interface can be written to streams.
Aynı nesneyi değiştirerek yazmak işe yaramaz. Açıklaması şöyle.
The serialization protocol preserves object identity.

If you repeatedly write the same object, it will not be serialized with its contents again, the stream will just include a backreference to indicate that you wrote the same object another time.
Bazen ObjectOutputStream yerine ObjectOutput arayüzü kullanılır. Şöyle yaparız.
ObjectOutput out = new ObjectOutputStream(...);
constructor - FileOutputStream
Bir OutputStream alır. Şöyle yaparız.
FileOutputStream fileOut = new FileOutputStream("C:\\out.dat");
ObjectOutput out = new ObjectOutputStream(fileOut);
constructor - OutputStream
Şöyle yaparız.
Socket socket = ...;
OutputStream outputStream = socket.getOutputStream();
ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);
close metodu
Tüm stream'lerde olduğu gibi işimiz bitince nesnenin kapatılması gerekir.Şöyle yaparız.
out.close(); 
flush metodu
Şöyle yaparız.
out.flush();
replaceObject metodu
Yazılacak nesneyi başka bir proxy nesne ile değiştirmek istersek kullanılabilir. protected metod olduğu çin ObjectOutputStream'den kalıtmak gerekir.
Örnek
Yazılacak nesenyi kontrol etmek için şöyle yaparız
public class MyOOS extends ObjectOutputStream {
  public MyOOS(OutputStream out) throws IOException {
    super(out);
    enableReplaceObject(true);
  }

  @Override
  protected Object replaceObject(Object obj) throws IOException {
    if ((obj instanceof Serializable))
      return obj;
    System.err.println("Skipping serialization of "+obj);
    return null;
  }
}
reset metodu
Aynı nesneyi değiştirerek tekrar yazmak istersek kullanılır. Şöyle yaparız.
ObjectOutputStream out = ...;
out.writeObject(foo);
changeFoo(foo);
out.reset(); // Clears all shared references.
out.writeObject(foo); // Writes a new copy of "foo" with the new data.
writeInt metodu
Şöyle yaparız.
out.writeInt(3);
writeObject metodu
Şöyle yaparız. Exception'ları dikkate almadım
out.writeObject(myObject);
Şöyle yaparız.
String str = ...;
out.writeObject(str);
Eğer exception olursa şu hatayı alırız.
Exception in thread "main" java.io.NotSerializableException: Main
writeUnshared metodu
Bu metod bir nesne değiştirilip tekrar yazılacaksa kullanılabilir. Ancak şu konuya dikkat etmek gerekir.
writeUnshared is for the most part useless. Unshared is shallow, in that other objects that the object still points to will be shared.



Hiç yorum yok:

Yorum Gönder