Objekt lesen aus Datei.

lernen.2007

Erfahrenes Mitglied
Ich habe in google viel nachgeschaut aber nichts sinnvolles gefunden. Was heisst Objekt lesen und schreiben in/aus Datei.Was kann man damit machen.


Danke
erkan
 
Hallo!

Diesen Prozess bezeichnet man als Serialisieren. Um ein Object Serialisieren zu können muß es entweder das java.io.Serializable oder das java.io.Externalizable Interface implementieren. Ersteres dient nur als eine Art Marker Interface um die Klasse als Serialisierbar zu Kennzeichnen. Bie letzterem muss du die Methoden zur Serialisierung selbst implementieren.
Code:
  	public void writeExternal(ObjectOutput out) throws IOException {
 				// TODO Auto-generated method stub
  				
  			}
  
 		 public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
 				// TODO Auto-generated method stub
  				
  			}

Daneben gibt es noch ein paar "versteckte" Methoden wie WriteResolve und ReadResolve mit denen man die "Rückgabe" der Serialiserung beeinflussen kann.


Bei der Serialisierung werden grundsätzliche alle nicht statischen und nicht transienten Felder + ein paar zusätzliche Metadaten in den ObjectOutputStream geschrieben.

Weiterhin erlaubt die Serialisierung auch das wiederherstellen von als final deklarierten Attributen... dazu bedient man sich dieses kleinen tricks hier: http://www.tutorials.de/tutorials226557.html&highlight=Unsafe

Schau mal hier.
Code:
  /**
   * 
   */
  package de.tutorials;
  
  import java.io.File;
  import java.io.FileInputStream;
  import java.io.FileOutputStream;
  import java.io.ObjectInputStream;
  import java.io.ObjectOutputStream;
  import java.io.Serializable;
  
  /**
   * @author Tom
   * 
   */
  public class SerializationExample {
  
  	/**
  	 * @param args
  	 */
  	public static void main(String[] args) throws Exception{
  		BusinessObject businessObject = new BusinessObject(4711L,"someData","secret");
  		System.out.println(businessObject);
  		
  		File file = new File("c:/businessObject.ser");
  		
 		ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(file));
  		objectOutputStream.writeObject(businessObject);
  		objectOutputStream.close();
  		
  		
 		ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(file));
 		BusinessObject businessObject2 = (BusinessObject)objectInputStream.readObject();
  		objectInputStream.close();
  		
  		System.out.println(businessObject2);
  		
  	}
  
  	static public class BusinessObject implements Serializable {
  		long id;
  
  		final String FOO;
  
  		transient String secret;
  
  		String data;
  
  		public BusinessObject(long id, String data,String secret) {
  			this.id = id;
  			this.data = data;
  			this.FOO = "ABC";
  			this.secret = secret;
  		}
  
  		public String getData() {
  			return data;
  		}
  
  		public void setData(String data) {
  			this.data = data;
  		}
  
  		public String getFOO() {
  			return FOO;
  		}
  
  		public long getId() {
  			return id;
  		}
  
  		public void setId(long id) {
  			this.id = id;
  		}
  
  		public String getSecret() {
  			return secret;
  		}
  
  		public void setSecret(String secret) {
  			this.secret = secret;
  		}
  
  		public String toString() {
  			StringBuffer buffer = new StringBuffer(30);
  			buffer.append(super.toString());
  			buffer.append(",id=");
  			buffer.append(id);
  			buffer.append(",FOO=");
  			buffer.append(FOO);
  			buffer.append(",secret=");
  			buffer.append(secret);
  			buffer.append(",data=");
  			buffer.append(data);
  			return buffer.toString();
  		}
  	}
  }

Gruß Tom
 
Ich hatte mir etwas anderes darunter vorgestellt z.B wenn ich eine Klasse(Objekt) habe, dass die Datei dann die getter oder andere Werte von dieser Objekt holt und speichert.

Danke
erkan
 
Das kannst Du glaube ich nur mittels Reflection.

Du kannst über das Klassen-Objekt die Konstruktoren, Membervariablen (Felder) und Methoden herausbekommen und somit auch getrennt speichern, wenn Dir die Seialisierung nicht gefällt...;)
 
Zurück