29 Kasım 2016 Salı

ObjectInputStream Sınıfı

Giriş
Şu satırı dahil ederiz.
import java.io.ObjectInputStream;
Header
ObjectInputStream verinin başına 4 byte yazar. İlk iki byte magic number, diğer iki byte ise stream version değeridir.

Veri Formatı
ObjectInputStream kendi içinde 1024 byte uzunluğunda bir bellek alanı bulundurur. Bu bellek Data + Block Data Marker alanına kadar okumak için yeterlidir.

Aşağıdaki kodda 4000 byte uzunluğunda bir dizi dosyaya yazılıyor. Daha sonra biner byte olarak okunuyor.
FileOutputStream output = new FileOutputStream("test.txt");
ObjectOutputStream stream = new ObjectOutputStream(output);

byte[] bytes = new byte[4000];

stream.write(bytes);
stream.close();

FileInputStream input = new FileInputStream("test.txt");
ObjectInputStream s = new ObjectInputStream(input);


byte[] buffer = new byte[1000];
int read = s.read(buffer);

while (read > 0) {
    System.out.println("Read " + read);
    read = s.read(buffer);
}

s.close();
Çıktı olarak şunu alırız. Sebebi ise Block Data Marker'a kadar okunacak şekilde ayarlanması.
Read 1000
Read 24
Read 1000
Read 24
Read 1000
Read 24
Read 928
constructor
Bir InputStream alır. Şöyle yaparız.
File file = new File("out.dat");
ObjectInputStream in = new ObjectInputStream(new FileInputStream(file));
readObject metodu
Okuma örneği. Exception'ları dikkate almadım
MyObject o = (MyObject) in.readObject();

Hiç yorum yok:

Yorum Gönder