Ich versuche, 'n' Bytes (serialisiertes Objekt) aus der Datei beginnend mit der Position 'i' zu lesen. Hier ist mein Code-Snippet,RandomFileAccess - java.io.StreamCorruptedException
public static void main(String[] args) throws IOException, ClassNotFoundException, NoSuchAlgorithmException {
String s = "XYZ";
RandomAccessFile f = new RandomAccessFile("/home/Test.txt", "rw");
f.write(s.getBytes());
FingerPrint finger = new FingerPrint("ABCDEFG", "ABCD.com");
Serializer ser = new Serializer();
byte[] key = ser.serialize(finger);//Serializing the object
f.seek(3);
f.write(key);
byte[] new1 = new byte[(int)f.length()-3];
int i=0;
for(i=3;f.read()!=-1;i++){
f.seek(i);
new1[i]=f.readByte();
}
FingerPrint finger2 = (FingerPrint) ser.deserialize(new1);//deserializing it
System.out.println("After reading:"+finger2.getURL());
}
ich folgende Ausnahme erhalten,
Exception in thread "main" java.io.StreamCorruptedException: invalid stream header: 00000000
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:807)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:302)
Hier ist meine Serializer Klasse,
class Serializer {
public static byte[] serialize(Object obj) throws IOException {
try(ByteArrayOutputStream b = new ByteArrayOutputStream()){
try(ObjectOutputStream o = new ObjectOutputStream(b)){
o.writeObject(obj);
}
return b.toByteArray();
}
}
public static Object deserialize(byte[] bytes) throws IOException, ClassNotFoundException {
try(ByteArrayInputStream b = new ByteArrayInputStream(bytes)){
try(ObjectInputStream o = new ObjectInputStream(b)){
return o.readObject();
}
}
}
}
Wenn ich nicht schreibe eine beliebige Zeichenfolge in die Datei und lese nur das Objekt, also von 0 bis eof, ich kann die Ausgabe sehen. Es gibt viele solche Fragen bereits gefragt, aber ich möchte wissen, warum es nicht funktioniert, wenn ich ein Objekt an einem bestimmten Ort schreibe und es zurück lese. Vielleicht mache ich etwas falsch, bitte teilen Sie Ihre Gedanken.
lesen _ „ich etwas tue sein kann falsch“ _ - sehr wahrscheinlich. Hast du die Datei in einem Hex-Editor untersucht, um zu sehen, was du eigentlich geschrieben hast? –
Neu in der Domäne. Danke für den Hexeditor..downloaded. – Anandan
Das ist keine gute Idee. Für jedes Objekt, das Sie serialisieren, wird ein Serialisierungs-Stream-Header und Daten für jede beteiligte Klasse vorangestellt. Ihre Datei wird viel größer sein als Sie denken. Die Serialisierung ist seriell, kein zufälliger Zugriff. – EJP