как использовать ByteArrayOutputStream и DataOutputStream одновременно (Java)

У меня есть настоящая проблема здесь, и я думаю, что это - потому что я не понимаю очень много, как я должен использовать API, обеспеченный Java.

Я должен записать int и a byte[] в a byte[]

Я думал об использовании a DataOutputStream решить запись данных с writeInt(int i) и write(byte[] b), и смочь поместить это в массив байтов, я должен использовать ByteArrayOutputStream метод toByteArray().

Я понимаю, что этот классы используют шаблон Обертки, таким образом, у меня было две опции:

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

или

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

но в обоих случаях, я "освобождаю" метод. в первом случае я не могу получить доступ toByteArray() метод, и во втором, я не могу получить доступ writeInt() метод.

Как я должен использовать это классы вместе?

11
задан ajduke 17 August 2013 в 18:39
поделиться

5 ответов

Вот так:

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

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

w.flush();

byte[] result = baos.toByteArray();

На самом деле ваша вторая версия вообще не будет работать. DataOutputStream требует фактического целевого потока для записи данных. Вы не можете выполнить new DataOutputStream () . На самом деле такого конструктора нет.

38
ответ дан 3 December 2019 в 01:15
поделиться

Класс Integer имеет метод для получения байтового значения int. Integer.byteValue ()

0
ответ дан 3 December 2019 в 01:15
поделиться

Используйте первый случай - оберните DataOutputStream вокруг ByteArrayOutputStream . Просто убедитесь, что вы сохранили ссылку на ByteArrayOutputStream . Когда вы закончите close () или, по крайней мере, flush () DataOutputStream , а затем используйте метод toByteArray для ByteArrayOutputStream .

1
ответ дан 3 December 2019 в 01:15
поделиться

Не могли бы вы сделать переменную для хранения ByteArrayOutputStream и передать ее в DataOutputStream.

ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
dos.writeInt(1);
byte[] result = dos.toByteArray();
2
ответ дан 3 December 2019 в 01:15
поделиться

Вы можете использовать потоковый подход, если вы соедините ваш выходной поток с входным потоком через PipedInputStream/PipetOutputStream. Затем вы будете потреблять данные из входного потока.

В любом случае, если то, что вам нужно сделать, просто и не требует потокового подхода, я бы использовал java.nio. ByteBuffer, на котором у вас есть

  • put(byte[] src) для вашего byte[]
  • putInt(int value)
  • и byte[] array() для получения содержимого
1
ответ дан 3 December 2019 в 01:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: