Pregunta

Tengo bastante problema aquí, y creo que es porque no entiendo mucho cómo debería usar la API proporcionada por Java.

Necesito escribir un int y un byte[] en un byte[]

Pensé en usar un DataOutputStream Para resolver la redacción de datos con writeInt(int i) y write(byte[] b), y para poder poner eso en una matriz de bytes, debería usar ByteArrayOutputStream método toByteArray().

Entiendo que estas clases usan el patrón de envoltura, así que tenía dos opciones:

DataOutputStream w = new DataOutputStream(new ByteArrayOutputStream());

o

ByteArrayOutputStream w = new ByteArrayOutputStream(new DataOutputStream());

Pero en ambos casos, "pierdo" un método. En el primer caso, no puedo acceder al toByteArray() método, y en el segundo, no puedo acceder al writeInt() método.

¿Cómo debo usar estas clases juntas?

¿Fue útil?

Solución

Como esto:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream w = new DataOutputStream(baos);

w.writeInt(100);
w.write(byteArray);

w.flush();

byte[] result = baos.toByteArray();

En realidad, tu segunda versión no funcionará en absoluto. DataOutputStream requiere una secuencia objetivo real para escribir los datos. No puedes hacer new DataOutputStream(). En realidad, no hay ningún constructor así.

Otros consejos

¿Podría hacer una variable para aferrarse al bytearRayOutputStream y pasarlo al DataOutputStream?

ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
dos.writeInt(1);
byte[] result = dos.toByteArray();

Use el caso anterior - Wrap DataOutputStream alrededor de ByteArrayOutputStream. Solo asegúrese de guardar la referencia al ByteArrayOutputStream. Cuando termines cerca () o al menos enjuague () el DataOutputStream y luego use el método tobytearray del ByteArrayOutputStream.

Puede usar un enfoque de secuencia si conecta su salida de salida a un inputstream a través de un PipedInputStream/PipetOutputStream. Luego consumirá los datos de InputStream.

De todos modos, si lo que debe hacer es simple y no requiere un enfoque de transmisión, usaría un java.nio.ByteBuffer en el que tienes

  • put(byte[] src) para tu byte[]
  • putInt(int value)
  • y byte[] array() Para obtener el contenido

No necesitas más como esto

Example exampleExample = method(example); 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); marshaller.marshal(exampleExample , baos);
Message message = MessageBuilder.withBody(baos.toByteArray()).build();

La clase entera tiene un método para obtener el valor de byte de un int.Integer.byteValue()

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