Frage

Ist es möglich, Object / Object eine interne Klasse? Ich kann es in Ordnung, schreiben und die erstellte Datei untersuchen, aber wenn ich versuche, es zu lesen zurück Object in Verwendung, bekomme ich ein EOFException nur ein Objekt o = oos.readObject zu lesen versuchen, ();

  1. Ich verwende das gleiche Datei-Objekt beiden Ströme zu öffnen, so das ist nicht das Problem.
  2. Es scheint, unabhängig von der Art der inneren Klasse zu sein - eine Klasse mit nur einem public int nicht identisch zu einer komplexeren Klasse
  3. .

Ich habe zu bewegen, und eine reguläre Klasse erstellen, und in der Senderklasse instanziiert, aber ich hasse zu gehen weg nicht zu wissen, ob es möglich ist, und wenn nicht, warum nicht.

Update: Verwandte Ausgaben, die die Ursache des Problems waren:

A. Sie können eine Datei mit einem Object geschrieben wieder öffnen und fügen: a. Zweite Header geschrieben wird und verdirbt die Datei

B. aufgrund von Schwankungen in Paar, um die Serialisierung ein HashMap ByteOutputStream mit einem Hash tun verdaut, funktioniert nicht, weil, wenn Sie die HashMap wieder in einer Object Datei zu lesen, können Sie sehr gut ein anderes Byte [von ByteOutputStream] erhalten: der Inhalt die gleiche, aber die byte [] (und so der Hash-disgest) nicht.

Hope, das hilft jemand etwas Zeit zu sparen.

War es hilfreich?

Lösung

Dies funktioniert für mich. Bitte suchen Sie alle Unterschiede zu Ihrer Lösung.

public class Example implements Serializable {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        new Example().run();
    }

    private void run() throws IOException, ClassNotFoundException {
        Inner inner = new Inner();
        inner.x = 5;
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        ObjectOutputStream outputStream = new ObjectOutputStream( out );
        outputStream.writeObject( inner );

        ByteArrayInputStream in = new ByteArrayInputStream( out.toByteArray() );
        ObjectInputStream inputStream = new ObjectInputStream( in );
        Inner inner2 = (Inner) inputStream.readObject();

        System.out.println( inner2.x );
    }

    class Inner implements Serializable {
        int x;
    }
}

Andere Tipps

Können Sie umfassen ein kleines Stück von Beispielcode? Die naheliegendste Erklärung ist, dass Sie nicht schließen / den Ausgangsstrom Spülung, bevor Sie versuchen, es zu lesen, wieder in.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top