2011-08-11 22 views
6

Estoy usando DataOutputStream para escribir en un archivo, sin embargo, quiero cambiar el endian de los datos.En Java, cuando escribo en un archivo con DataOutputStream, ¿cómo defino el Endian de los datos que se escriben?

Ésta es la forma en que estoy escribiendo los datos de bytes en el fichero (que emite en Little Endian por defecto)

public void generateBinObjFile(String outputFile) 
    try { 
     // Create file 

     DataOutputStream stream = new DataOutputStream(
       new FileOutputStream(outputFile)); 

     stream.writeShort(this.quantize(this.xComponents.get(index), //<-- Short is written in little Endian 
        this.min_x, this.max_x) - 32768); 

     } // catch statements here 

¿Hay una manera que puede definir el Endian de cómo los datos de byte está escrito en Java ?

Respuesta

8

No puede hacer esto con DataOutputStream, que siempre usa big endian.

Usted puede utilizar un ByteBuffer en los que se puede llamar order() para influir en la forma en que lee y escribe datos.

Puede utilizar el ByteBuffer ya sea para preparar un byte[] que se va a escribir con una clásica OutputStream más adelante o destinará íntegramente a NIO y utilizar cualquier WritableByteChannel para la escritura

+0

dice que "no se puede crear una instancia del tipo 'ByteBuffer'" .Estoy usando la nueva palabra clave para crear un objeto de ella, ¿hay alguna forma diferente o más correcta de crear una instancia de un objeto? – deztructicus

+1

@deztructius: compruebe el JavaDoc al que me he vinculado, por favor. –

+1

Puede usar 'ByteBuffer.allocateDirect (int size)' –

0

You cannot:

escribe un corto para el flujo de salida subyacente como dos bytes, el byte alto primero.

Todos los métodos de "multibyte" funcionan de esa manera. Si lo necesita al revés, necesita escribir bytes usted mismo.

0

Emite los datos de una manera legible por DataInputStream.

Si tiene que preocuparse por el endianness, no debe utilizar un Data * Stream.

0

todas las respuestas dadas son derecho. Sin embargo, puede tomar la fuente de DataOutputStream, pegarla en una nueva clase y revertir el orden de los bytes en los diversos writeShort, writeLong, etc. (o al menos en los que necesite). No es un trabajo tan difícil.

Obviamente no puede usarlo para comunicarse con un DataInputStream en el otro lado, pero supongo que necesita escribir en un archivo o socket con un programa C en el otro lado, por lo que no necesitará un DataInputStream.

Cuestiones relacionadas