Frage

Ich habe hier ein ziemliches Problem und ich denke, das liegt daran, dass ich nicht viel verstehe, wie ich die von Java bereitgestellte API verwenden sollte.

Ich muss eine schreiben int und ein byte[] in ein byte[]

Ich dachte daran, eine zu verwenden DataOutputStream Um das Schreiben des Daten zu lösen mit writeInt(int i) und write(byte[] b), und in der Lage sein, das in ein Byte -Array zu bringen, sollte ich verwenden ByteArrayOutputStream Methode toByteArray().

Ich verstehe, dass diese Klassen das Wrapper -Muster verwenden, also hatte ich zwei Optionen:

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

oder

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

Aber in beiden Fällen "verliere" ich eine Methode. Im ersten Fall kann ich nicht auf die zugreifen toByteArray() Methode, und im zweiten kann ich nicht auf die zugreifen writeInt() Methode.

Wie soll ich diesen Klassen zusammen verwenden?

War es hilfreich?

Lösung

So was:

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

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

w.flush();

byte[] result = baos.toByteArray();

Eigentlich funktioniert Ihre zweite Version überhaupt nicht. DataOutputStream Benötigt einen tatsächlichen Zielstrom, in dem die Daten geschrieben werden können. Du kannst nicht tun new DataOutputStream(). Es gibt tatsächlich keinen solchen Konstruktor.

Andere Tipps

Könnten Sie eine Variable erstellen, die Sie am BytearrayoutputStream festhalten und in den DataOutputStream weitergeben können.

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

Verwenden Sie den früheren Fall - Wrap DataOutputStream um die ByteArrayOutputStream. Stellen Sie einfach sicher, dass Sie den Verweis auf die speichern ByteArrayOutputStream. Wenn Sie fertig sind () oder zumindest bündig () die DataOutputStream und dann die Tobytearray -Methode der ByteArrayOutputStream.

Sie können einen Stream -Ansatz verwenden, wenn Sie Ihren OutputStream über a an einen InputStream anschließen PipedInputStream/PipetOutputStream. Anschließend verbrauchen Sie die Daten aus dem InputStream.

Wie auch immer, wenn das, was Sie tun müssen, einfach ist und keinen Stream -Ansatz erfordert, würde ich a verwenden java.nio.ByteBuffer auf was du hast

  • put(byte[] src) für dein byte[]
  • putInt(int value)
  • und byte[] array() Um den Inhalt zu bekommen

Sie brauchen nicht mehr so

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

Die Ganzzahlklasse verfügt über eine Methode, um den Bytewert eines int zu erhalten.Integer.byteValue()

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