Pregunta

Estoy buscando algo simple (sin lib externa preferentemente) para escribir y cargar un byte [] a partir de un archivo. Más o menos algo así como [salmuera de Python] [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();

El problema parece ser que no puedo leer la estructura de objetos de un archivo de esa manera. En un editor hexadecimal, además, el archivo "Somebytes" contiene sólo un par o 0s. Por lo tanto, no parece los pone FileOutputStream cualquiera de los contenidos ( "T" o el byte equivalente) en él.

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

¿Fue útil?

Solución

Usted ha asignado una memoria intermedia de bytes con el Tamaño de bytes, pero eso no significa que la memoria intermedia de bytes está asociado con la matriz de bytes. Se puede envolver un conjunto de bytes con ByteBuffer.wrap.

Aquí hay un cambio mínimo en el código que ¿Tiene escribir la t en el archivo:

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();

Tenga en cuenta que para el código real se debe utilizar un try / finally para asegurarse de que el archivo se cierra siempre, independientemente de las excepciones.

Sin embargo, este es un largo camino de serialización. Java hace tener su propia serialización binaria - vea ObjectOutputStream y href="http://download.oracle.com/javase/6/docs/api/java/io/ObjectInputStream.html" rel="nofollow"> ObjectInputStream . Personalmente normalmente evitar este tipo de serialización sin embargo, ya que puede ser muy frágil en la cara de los cambios en las clases. Hay varios otros enfoques para la serialización, como el uso de Ahorro o búferes de protocolo para la serialización binaria, o serializar a XML, JSON o algún otro formato legible por humanos.

Otros consejos

Puede

seek(position)
b = read(length)

A continuación, b será una matriz de bytes de su longitud.

Lo sentimos -. Al releer lo que buscas para escribir, sin leer

Una versión más simple de la misma cosa es.

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

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

Hay un montón de ejemplos sobre cómo leer / escribir byte [] a partir de archivos en la web. Prueba Google.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top