Java ObjectStreamit ja sarjallistaminen

Olioiden sarjallistamiseksi kutsutaan sitä, kun virtaan kirjoitetaan olioarvoja. Näin kirjoitetut arvot voidaan lukea toisten olioiden arvoiksi. Eli ei kirjoiteta koko olioita.

Sarjallistettavien olioiden tulee toteuttaa rajapinta Serializable, joka ei vaadi kuin serialVersionUID muuttujan arvon asettamisen.

import java.io.Serializable;

public class Olio implements Serializable{
	// Defaultti serialVersionUID
	private static final long serialVersionUID = 1L;

Mikäli luokkaa tai jotain sen ominaisuutta ei haluta sarjallistaa, tulee se merkitä transient:si

private transient PropertyResourceBundle prb; //ei sarjallisteta

Näin tallennettujen arvojen lukeminen ja kirjoittaminen hoidetaan ObjectInputStream ja ObjectOutputStream luokilla.

Alla esimerkki ohjelma luokan sarjallistamisesta ja sen kirjoittamisesta ja lukemisesta.

// Olio.java
import java.io.Serializable;

public class Olio implements Serializable{
	// Defaultti serialVersionUID
	private static final long serialVersionUID = 1L;
	
	private String name;
	private int ID;
	
	public Olio(String name, int ID) {
		this.name = name;
		this.ID = ID;
	}
	
	public String getName() {
		return this.name;
	}
	public int getID() {
		return this.ID;
	}
	public String toString() {
		return this.name + " : " + this.ID;
	}
}
// ObjectStreamJaSarjallistaminen
import java.io.*;

public class ObjectStreamJaSarjallistaminen {
	public static void main(String[] args) throws ClassNotFoundException {
		
		// luodaan olio
		Olio olio = new Olio("Aku Ankka", 555);
		
		// tallennetaan oliosta tiedostoon
		try {
			FileOutputStream fos = new FileOutputStream("olio.dat");
			ObjectOutputStream oos = new ObjectOutputStream(fos);
			oos.writeObject(olio);
		} catch (IOException e) {
			System.out.println(e.toString());
		}
		
		// luetaan olioon tiedostosta
		Object olio2  = null;
		try {
			FileInputStream fis = new FileInputStream("olio.dat");
			ObjectInputStream ois = new ObjectInputStream(fis);
			olio2 = ois.readObject();
		} catch (IOException e) {
			System.out.println(e.toString());
		}
		System.out.println(olio2.toString());
	}
}
Advertisements

Vastaa

Täytä tietosi alle tai klikkaa kuvaketta kirjautuaksesi sisään:

WordPress.com-logo

Olet kommentoimassa WordPress.com -tilin nimissä. Log Out / Muuta )

Twitter-kuva

Olet kommentoimassa Twitter -tilin nimissä. Log Out / Muuta )

Facebook-kuva

Olet kommentoimassa Facebook -tilin nimissä. Log Out / Muuta )

Google+ photo

Olet kommentoimassa Google+ -tilin nimissä. Log Out / Muuta )

Muodostetaan yhteyttä palveluun %s