Преобразование ByteArrayOutputStream в значения int

#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 " ");
         }