Serializable und Object In/Out Stream

dayaftereh

Top Contributor
Hallo,

Ich habe mich gerade mit dem ObjectInputStream und ObjectOutputStream befasst. Ich habe ein Kliene Server Client Applikation geschieben! Ich schiecke jede 1,5 sekunden eine Object vom Server zum Client, dieses Object ist auf der Server Seite immer das Gleiche, das Object ist in der Klasse Packet Realisiert, jedes mal wenn der Server ein Packet schickt, zählt er in dem Object eine Int hoch! Aber wenn das Object beim Cleint ankommt ist die Hochgezählte Int immer 0, ich habe die Hash-Methode unde Equel - Methode überschieben kan es sein das es Daran liegt? Hat jemand eine Idee?

Andere sache Wenn ich erste den ObjectInputStream und dann den ObjectOutputStream erzugt, bleibt java im ObjectOutputStream hängen, er läuft garnicht mehr weiter? mache ich bei der Erzugung was Falsch?

Mein Server:
Java:
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TestServer {

	private ObjectInputStream in = null;
	private ObjectOutputStream out = null;

	private Packet p = null;

	public TestServer() {
		try {
			ServerSocket serverSocket = new ServerSocket(21000);
			Socket s = serverSocket.accept();

			// Wenn ich hier erst ObjectInputStream erzuge 
//und dan ObjectOutputStream bleibt die JVM hier Stehen, andersterum ist das nicht
			// der Fall?

			System.out.println("Öffne ObjectInputStream");
			in = new ObjectInputStream(s.getInputStream());

			System.out.println("Öffne ObjectOutputStream");
			out = new ObjectOutputStream(s.getOutputStream());

		} catch (IOException e) {
			e.printStackTrace();
		}

		p = new Packet();
		p.setName("Test");
		p.setNumer(3);
	}

	private void start() {
		try {
			while (true) {
				sendObject();
				Thread.sleep(1500);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private void sendObject() throws Exception {
		out.writeObject(p);
		p.setValue(p.getValue() + 1);
		printSendPacket(p);
	}

	private void printSendPacket(Packet p) {
		System.out.println("Send Packet: " + p.getName() + "," + p.getValue());
	}

	public static void main(String[] args) {
		TestServer testServer = new TestServer();
		testServer.start();
	}

}
Meine Client:
Java:
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;

public class TestClient {

	private ObjectInputStream in = null;
	private ObjectOutputStream out = null;

	public TestClient() {
		try {
			Socket s = new Socket("127.0.0.1", 21000);
			
			// Wenn ich hier erst ObjectInputStream erzuge und dan ObjectOutputStream 
// bleibt die JVM hier Stehen, andersterum ist das nicht
			// der Fall?
			
			System.out.println("Öffne ObjectOutputStream");
			out = new ObjectOutputStream(s.getOutputStream());
			
			System.out.println("Öffne ObjectInputStream");
			in = new ObjectInputStream(s.getInputStream());
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private void start() {
		Packet p = null;
		try {
			while (true) {
				Object o = in.readObject();
				
				if (o instanceof Packet) {
					p = (Packet) o;
					printPacket(p);
				}				
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	private void printPacket(Packet p){
		System.out.println("Packet: " + p.getName() + "," + p.getValue());
	}

	public static void main(String[] args) {
		TestClient testClient =	new TestClient();
		testClient.start();
	}

}
Die Klasse Packet:
Java:
import java.io.Serializable;



public class Packet implements Serializable{
		
	private static final long serialVersionUID = -1779445893448515765L;
	
	private int numer = 0;
	private String name = null;
	private int value =  0;
	
	public int getNumer() {
		return numer;
	}
	public void setNumer(int numer) {
		this.numer = numer;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
		
	public int getValue() {
		return value;
	}
	public void setValue(int value) {
		this.value = value;
	}
	@Override
	public boolean equals(Object obj) {
		if (obj == null) {
			return false;
		}

		if (obj == this) {
			return true;
		}

		if (!(obj instanceof Packet)) {
			return false;
		}
		
		Packet p = (Packet)obj;
		
		return name.equals(p.getName()) && numer == p.getNumer();
	}
	
	@Override
	public int hashCode() {
		int i = name.hashCode();
		i += numer*2;
		return i;
	}
	
	

}

Danke Schonmal!
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
ein ObjectOutputStream spart, und sendet dieselben Objekte nicht nochmal sondern eine kurze Info 'Object mit Index x ein weiteres mal'
anderenfalls hättest du z.B. bei zwei Objekten, die sich gegenseitig referenzieren, mächtig Probleme,

ob equals/ hashcode genutzt werden, kann ich nicht sagen, derzeit wird dort aber der value nicht berücksichtigt
(ok, kleiner Test: bringt auch nix die Information hinzuzufügen)

es bleibt als Möglichkeit
out.reset()
oder ein neues Paket

-------

etwas ungünstig: du sendest erst das Paket, erhöhst dann den Wert und gibst ihn dann beim Client aus,
bei Server kommt immer in Paket mit einem Value um 1 kleiner an als der Client gerade behauptet

die Methode printSendPacket() besser auch ohne Parameter, oder zumindest kein Paramter, der wie das Klassenattribut p heißt

--------

das mit der Stream-Reihenfolge ist richtig, wenn auch leicht verwunderlich, kannte ich bisher auch nicht, erstaunlich gefährlich gebaut,
im Konstruktor liest ein ObjectInputStream bereits ein paar Bytes,
wenn vorher auf Gegenseite kein OutputStream da ist, dann wartet der Konstruktor ewig,

machen das beide Seiten, dann ist es ein Deadlock, also auf die Reihenfolge achten, am besten auf beiden Seiten erst Output, dann Input
 

Oni

Top Contributor
Hi,

wenn sich das Object immer wieder ändert, kannst du es so senden. ABER:


That will work in this case, but will generally cause really odd errors. Any component object written will still be shared. So for instance if the List above was wrapped with Collections.synchronizedList, the problem would remain. writeUnshared is not very useful. – Tom Hawtin - tackline Sep 27 '08 at 14:15


Java:
private void sendObject() throws Exception {
		//out.writeObject(p);		
		out.writeUnshared(p);
		p.setValue(p.getValue() + 1);
		printSendPacket(p);
	}

Gruß
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
foobar Object to byte[] ohne Serializable Allgemeine Java-Themen 6
T Komische Zeichen im Zusammenhang mit Serializable interface Allgemeine Java-Themen 13
M Klassen Serializable Exception Allgemeine Java-Themen 1
K Properties serializable machen Allgemeine Java-Themen 6
J Interface Serializable Methodensignatur Allgemeine Java-Themen 2
F Sinn des Serializable Interfaces Allgemeine Java-Themen 8
C Serialisierung ohne Serializable Allgemeine Java-Themen 4
R Interface Serializable technische Begrenzung Allgemeine Java-Themen 2
G sun.awt.image.OffScreenImage Serializable machen Allgemeine Java-Themen 5
J Serializable + callBack-Methoden Allgemeine Java-Themen 4
J Wieso implementiert HTTPServlet Serializable? Allgemeine Java-Themen 2
M Reflection und Serializable Allgemeine Java-Themen 5
deetee Wie nennt man Interfaces wie Serializable? Allgemeine Java-Themen 8
J Probleme mit Serializable Allgemeine Java-Themen 3
H Object cast exception Allgemeine Java-Themen 7
P JDK nicht installiert in Net Object Fusion Allgemeine Java-Themen 7
Erwin82a Object cannot be converted to Custom Class in Lampda Expression Allgemeine Java-Themen 2
Zeppi Cast Object in Generics Allgemeine Java-Themen 4
MoxxiManagarm Mapping into existing object Allgemeine Java-Themen 15
coolian Swing erstellt fillreckt immmer ein neues object Allgemeine Java-Themen 13
N Wo ist Object.class ? Allgemeine Java-Themen 0
R Erste Schritte Object reference funktioniert nicht. Wie mach ichs richtig? Allgemeine Java-Themen 3
RalleYTN Datentypen Herausfinden ob Object ein Array ist ohne den Typen des Arrays zu kennen? Allgemeine Java-Themen 12
N Gibt es etwas allgemeineres as Object? Allgemeine Java-Themen 16
Bananabert Swing jtree : image als user object Allgemeine Java-Themen 2
N ArrayList in eigenem Object nicht richtig serialisierbar Allgemeine Java-Themen 14
B [Android] EditText-Object ist null - Nimmt nicht den Wert des enthaltenen Textfeldes ein Allgemeine Java-Themen 2
Z Vergleich zwischen int und Object Allgemeine Java-Themen 1
D Object nach Vererbung mit Class Object überprüfen Allgemeine Java-Themen 4
T InvalidClassException - Read null attempting to read class descriptor for object Allgemeine Java-Themen 8
J Ist eine Instanz von einem bestimmten Object Typ? Allgemeine Java-Themen 6
L Sortieren von "Map<String, Object>" Allgemeine Java-Themen 2
M Cast double[]-->Object[] oder Vector<double[]> Allgemeine Java-Themen 3
G REST- Object darstellung Allgemeine Java-Themen 6
C Object.equals() liefert falschen Wert? Allgemeine Java-Themen 14
darekkay Generics: Wildcard und Object Allgemeine Java-Themen 5
O Socket Object wird scheinbar falsch empfangen Allgemeine Java-Themen 6
N Klasse/Object Eigenaufruf Allgemeine Java-Themen 5
G JNI Shared Object Allgemeine Java-Themen 10
B Variable class in java.lang.Object Allgemeine Java-Themen 11
S Klassen Zuorgnung Object-char Allgemeine Java-Themen 2
N java.lang.IllegalMonitorStateException: object not locked by thread before notify() Allgemeine Java-Themen 2
S Type mismatch: cannot convert from Object to float Allgemeine Java-Themen 3
A Input/Output Serialisierung und Object.hashCode() Allgemeine Java-Themen 3
M Jaxb und JPA: A cycle is detected in the object graph Allgemeine Java-Themen 5
H double dispatch und equals(Object) Allgemeine Java-Themen 6
J Datentypen Problem mit Date-Object Allgemeine Java-Themen 2
B Variablen Alle RenderingHints.Keys (KEY_*) in Array + alle RenderingHints.Keys (VALUE_*) in Object[] Allgemeine Java-Themen 8
J Verschiedene Klassen als "Object" in ArrayList und dann in for-Schleife erzeugen!? Allgemeine Java-Themen 2
L Object Instanz anhand eines Strings Allgemeine Java-Themen 10
A Datei als Object einlesen und das Object als Singleton instance setzen. Allgemeine Java-Themen 13
DEvent embedded Object Database in Text Format Allgemeine Java-Themen 5
J Casting Problem Object, Double und String Allgemeine Java-Themen 3
M Object-Instanz in Date übersetzen Allgemeine Java-Themen 6
P Tree Object structure Allgemeine Java-Themen 19
G Object mit clone kopieren Allgemeine Java-Themen 21
J merkwürdig: Object Allgemeine Java-Themen 6
woezelmann Object nach Deserialisierung nicht mehr gleich Allgemeine Java-Themen 13
Iron Monkey Object in Datei effizienter lesen / schreiben Allgemeine Java-Themen 13
L Object = null? Allgemeine Java-Themen 16
T Object auf Double, Int, String testen Allgemeine Java-Themen 5
N serialize deserialize java object über string Allgemeine Java-Themen 8
N getName() of reflection Object Allgemeine Java-Themen 4
B Probelm mit File Object Allgemeine Java-Themen 6
G NoClassDefFoundError: java/lang/Object Allgemeine Java-Themen 4
S Liste Object Löschen Allgemeine Java-Themen 7
P not enough space for object heap - Trotz mehr RAM? Allgemeine Java-Themen 6
MQue List<String> aus List<Object> generieren Allgemeine Java-Themen 2
M ArrayList<Object[]> und toArray() Allgemeine Java-Themen 5
Daniel_L LinkedList vom Typ Object-Array? Allgemeine Java-Themen 4
B Warum return type Object ? Allgemeine Java-Themen 4
D Generisches Object erstellen Allgemeine Java-Themen 2
M Databinding von Object zu properties-Datei Allgemeine Java-Themen 10
P Wieso HashMap-Zugriff mit Object, statt mit MyObject? Allgemeine Java-Themen 12
A NullPointer bei konvertierung von byteArr --> Object Allgemeine Java-Themen 3
reibi Object clonen spezial Allgemeine Java-Themen 8
C casten vom Typ Object nach Double[][] Allgemeine Java-Themen 2
X cannot convert from Object[] to Integer[] Allgemeine Java-Themen 2
G JSON Object auslesen Allgemeine Java-Themen 1
T cast Object to Double[] Allgemeine Java-Themen 2
G Object. Wrapper Allgemeine Java-Themen 12
V Object durchsuchen Allgemeine Java-Themen 4
U eigene Datenstruktur ArrayList<String> nach Object [][ Allgemeine Java-Themen 2
T "Object o = new Object()" vs. "new Object()&q Allgemeine Java-Themen 8
T Object -> byte[] Allgemeine Java-Themen 5
M Implementation von Zugriffen auf Object[index] in der JVM Allgemeine Java-Themen 9
T Klasse => Primitiv ? Object instanceof Klasse Allgemeine Java-Themen 2
B mit methode ein object zurückgeben. Allgemeine Java-Themen 5
R Object Dynamisch erzeugen (Reflection API) Allgemeine Java-Themen 22
T HashMap (String, Object(String , int)) nach int sortieren Allgemeine Java-Themen 7
P Typ Object in socket umwandeln Allgemeine Java-Themen 4
G Object cast via Reflection Allgemeine Java-Themen 8
Zed JList Object einfügen und Text anzeigen Allgemeine Java-Themen 3
MQue Object in Integer umwandeln Allgemeine Java-Themen 3
G Error: Hashtable Type safety: The method put(Object, Object) Allgemeine Java-Themen 6
T double to object Allgemeine Java-Themen 3
S File Object zu Directory machen ? Allgemeine Java-Themen 9
V Brauche dringend Hilfe. Object-handling Allgemeine Java-Themen 4
N Warning "The Cast from Object to" Allgemeine Java-Themen 9
K Threads und ein übergeordnetes Object Allgemeine Java-Themen 7

Ähnliche Java Themen


Oben