#java #android #bytearrayoutputstream
#java #Android #bytearrayoutputstream
Вопрос:
Я постоянно пытаюсь преобразовать ByteArrayOutputStream в значения int.
Я записываю аудио с помощью микрофона и записываю его out = new ByteArrayOutputStream()
примерно так:
out.write(buffer, 0, count);
byte audio[] = out.toByteArray();
Когда я печатаю это, я получаю следующее: [B @3456337e
Как мне преобразовать их в целые числа.
Пожалуйста, помогите, спасибо
Комментарии:
1. Вы хотите распечатать массив байтов или действительно хотите преобразовать его в массив int?
2. массив int, сэр @kupsef
3. Итак, вы хотите преобразовать каждый блок из четырех байтов в целое число со знаком?
Ответ №1:
Стандартного способа сделать это нет, потому что на самом деле это зависит от того, какие байты у вас есть, но, поскольку это источник звука, я думаю, вы можете сделать это так :
IntBuffer intBuf =
ByteBuffer.wrap(byteArray)
.order(ByteOrder.BIG_ENDIAN) //or try ByteOrder.LITTLE_ENDIAN
.asIntBuffer();
int[] array = new int[intBuf.remaining()];
intBuf.get(array);
//The result you want is "array"
Я надеюсь, что это поможет вам.
Комментарии:
1. Спасибо за ответ, извините, я не очень хорошо понял, что я должен напечатать, чтобы получить мой целочисленный массив здесь? я напечатал intBuf.get(массив); и я получил java.nio.ByteBufferAsIntBufferB[pos = 11025 lim= 11025 cap = 11025] что мне нужно, так это отдельные числа от 0 до 256 @user3733356
2. да, извините, я забыл сказать вам, что результатом является «массив». Выведите «массив», и у вас будет то, что вы хотите
3. напечатанный массив, получил [I@629bee3a, я думаю, это еще один байт
4. @user3464035 Попробуйте
System.out.println(Arrays.toString(array));
.5. @Duncan Я получаю кучу 0,0,0,0,0,0, потому что звук колеблется, я должен получить числа, такие как 100, 80, 34,…
Ответ №2:
Преобразуйте его в массив, оберните массив в a ByteArrayInputStream
, оберните его в a DataInputStream,
и используйте readInt().
Ответ №3:
Попробуйте выполнить следующее —
ByteArrayOutputStream out = new ByteArrayOutputStream();
DataInputStream dataIs = new DataInputStream
(new ByteArrayInputStream(out.toByteArray());
// available stream to be read
while(dataIs.available()>0)
{
int k = dataIs.readInt();
// print int
System.out.print(k " ");
}