Serialisieren von Objekten

Eine Java Klasse kann durch das Serialisieren quasi im ganzen gespeichert werden. Dazu muss jedoch das Interface Serializable Implementiert werden.

import java.io.*;
import java.util.*;
import java.lang.Exception;

public class EinstellungHandler {

	private static final String FILENAME = "./einstellung.ser";

	private static Einstellung einstellung;

	public static void main(String... args) {
		if (new File(FILENAME).exists()){
			einstellung = (Einstellung) readObject();
		} else {
		    einstellung = new Einstellung();
		}
		einstellung.setSprache("deutsch");
		writeObject(einstellung);
	}

	private static Object readObject() {
		Object o = null;
		FileInputStream fileInStream = null;
		ObjectInputStream objInStream = null;
		try {
			fileInStream = new FileInputStream(FILENAME);
			objInStream = new ObjectInputStream(fileInStream);
			o = objInStream.readObject();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} finally {
			if (fileInStream != null) {
				try {
					fileInStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}

			if (objInStream != null) {
				try {
					objInStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return o;
	}

	private static void writeObject(Object o) {
		FileOutputStream fileOutStream = null;
		ObjectOutputStream objOutStream = null;
		try {
			fileOutStream = new FileOutputStream(FILENAME);
			objOutStream = new ObjectOutputStream(fileOutStream);
			objOutStream.writeObject(o);
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (fileOutStream != null) {
				try {
					fileOutStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}

			if (objOutStream != null) {
				try {
					objOutStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}

	private static class Einstellung implements Serializable {

		private static final long serialVersionUID = 1l;

		private String sprache;

		public String getSprache() {
			return this.sprache;
		}

		public void setSprache(String inSprache) {
			this.sprache = inSprache;
		}
	}
}

Nachteile der Serialisierung von Objekten

Als großen Nachteil der Serialisierung von Objekten ist dass, wenn die Klasse welche Serialisiert wurde (quasi gespeichert) auch nur mit diesem Code geladen werden kann.

Änderungen an der Java Klasse führen dazu das die Serialisierte Datei nicht mehr geladen werden kann, es wird eine java.io.InvalidClassException ausgegeben.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.