Warum StreamCorruptedException?

freggeln

Mitglied
Hallo,

ich habe ein Problem, dass ich den folgenden Fehler erhalten:

Code:
Exception in thread "main" java.io.StreamCorruptedException: invalid stream header: EFBFBDEF

Die Exception wird von dem folgenden Code ausgelöst.

Java:
String vString = "test1234";
byte[] vByte = vString.getBytes("UTF-8");
ByteArrayInputStream vByteArr= new ByteArrayInputStream( vByte );
ObjectInputStream vStream = new ObjectInputStream( vByteArr );

Kann mir jemand sagen, was ich gegen die Exception machen kann?

Danke & Gruß
 
G

Gastredner

Gast
Keinen String in Byte-Form in einen ObjectInputStream stecken?
DIe Object-Streams dienen zum Ein- und Auslesen von Objekten - du versuchst hingegen, die Byte-Repräsentation eines Textes in einen solchen Stream zu stecken. Willst du einen Text speichern/einlesen, so musst du ein String-Objekt verwenden.
 

Murray

Top Contributor
Du kannst einem ObjectInputStream nicht irgendwelche Daten zu lesen geben; das muss schon eine Byte-Sequenz sein, die von einem ObjectOutputStream geschrieben worden ist (oder zumindest exakt so aufgebaut ist, als wäre sie von einem solchen geschrieben worden)
 

freggeln

Mitglied
Mit einem ByteArrayInputStream. Dem kannst du dann die Bytes unterschieben, die du mit getBytes aus dem String holst.

Auf die Idee bin ich in der Zwischenzeit auch schon gekommen, leider klappt es noch nicht so wirklich, wie ich es mit vorgestellt habe.

Java:
String vString = "test1234";
byte[] vByteArr = vString.getBytes();
ByteArrayInputStream vInStream = new ByteArrayInputStream( vByteArr );
System.out.println( "vInStream: " + vInStream.available() );
CipherInputStream is = new CipherInputStream(vInStream, vEncrypt.aesCipher);
System.out.println("avail: " + is.available() );

Der obige hat die folgende Ausgabe zur Folge:
Code:
vInStream: 4
avail: 0

Sollte denn nicht eigentlich bei "avail" 4 stehen?

Gruß
 
F

freggelnAntwort

Gast
available muss kein korrektes Ergebnis liefern. Hier alles in einem Rutsch:

Java:
	public static void main(String[] args) throws Exception {
		Cipher c = Cipher.getInstance("DES/CBC/PKCS5Padding");
		c.init(Cipher.ENCRYPT_MODE, KeyGenerator.getInstance("DES").generateKey());
		System.out.println(new String(c.doFinal("blabla".getBytes())));
		System.out.println(new String(c.doFinal("blabla".getBytes())));
	}
 

Neue Themen


Oben