Frage

Ich bin auf der Suche nach etwas einfach (keine externen lib vorzugsweise) zu schreiben und einen Byte laden [] aus einer Datei. Mehr oder weniger so etwas wie [Python Pickle] [1].

byte[] bytes = new byte[10];
ByteBuffer bbuf = new ByteBuffer.allocate(bytes.length);
bbuf.wrap(bytes);   // edited due to Jon Skeet's answer
CharBuffer cbuf = bbuf.asCharBuffer();
cbuf.put("t");
FileOutputStream test = new FileOutputStream("somebytes");
test.write(bytes);
test.close();

Das Problem scheint zu sein, dass ich nicht die Objektstruktur aus einer Datei wie das lesen kann. In einem Hex-Editor außerdem die Datei „Somebytes“ nur ein paar oder 0s enthält. So scheint es nicht die Outputstream setzt irgendwelche des Inhalts ( „t“ oder das Byte-Äquivalent) hinein.

[1] http://wiki.python.org/moin/UsingPickle

War es hilfreich?

Lösung

Sie haben einen Byte-Puffer mit der zugewiesenen Größe von bytes, aber das bedeutet nicht, der Byte-Puffer wird mit dem Byte-Array zugeordnet ist. Sie können ein Byte-Array mit ByteBuffer.wrap wickeln.

Hier ist eine minimale Änderung an Ihrem Code, der nicht schreiben die t in die Datei:

byte[] bytes = new byte[10];
ByteBuffer bbuf = ByteBuffer.wrap(bytes);
CharBuffer cbuf = bbuf.asCharBuffer();
cbuf.put("t");
FileOutputStream test = new FileOutputStream("somebytes");
test.write(bytes);
test.close();

Beachten Sie, dass für echten Code, den Sie einen Versuch verwenden sollten / finally machen blockieren, dass die Datei immer geschlossen ist, unabhängig von Ausnahmen.

Dies ist jedoch ein langer Weg von der Serialisierung. Java hat seine eigene binäre Serialisierung hat - siehe ObjectOutputStream und ObjectInputStream . Persönlich vermeide ich in der Regel diese Art von Serialisierung jedoch, wie es angesichts der Änderungen an Klassen sehr spröde sein kann. Es gibt verschiedene andere Ansätze zur Serialisierung, wie für binäre Serialisierung Thrift oder Protocol Buffers, oder die Serialisierung in XML, JSON oder einem anderen Menschen lesbaren Format.

Andere Tipps

Sie können

seek(position)
b = read(length)

Dann b wird ein Array von Bytes Ihrer Länge sein.

Sorry -. Auf Wiederlesen Sie zum Schreiben suchen, nicht lesen

Eine einfachere Version der gleichen Sache.

byte[] bytes = new byte[10];
bytes[1] = 't';

FileOutputStream test = new FileOutputStream("somebytes");
test.write(bytes);
test.close();

Es gibt viele Beispiele dafür, wie zu lesen / schreiben byte [] von Dateien im Internet. Testen Sie Google.

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