Строки предназначены для представления текста. Аудиоданные не являются текстовыми. Попытайтесь, как можете, невозможно переместить некоторые аудиоданные в String, а затем попытаться извлечь ваши аудиоданные из String. Он не предназначен для работы.
Поскольку аудиоданные, с которыми вы хотите работать, не являются текстом, то у вас нет оснований предполагать, что String в этом процессе. Забудьте о Strings, теперь вы знаете, что они не подходят для вашей цели, поэтому оставьте их в покое полностью. Двоичные данные, такие как аудио, могут быть представлены как последовательности байтов. Например, например, массив byte [].
Удалить переменную String testString
. Не строите его, не объявляйте, полностью удаляйте. Это строка, и вы не можете использовать Strings для своей цели, поэтому избавитесь от нее.
Вместо этого давайте сосредоточимся на использовании вашей переменной byte[] test
как есть. Это уже байт [] и содержит все данные. Так что это все, что вам нужно.
Вы можете записать его с помощью System.out.write(test);
, но в консоли это не очень полезно. В OutputStream сокета это прекрасно.
Или вы можете записать его шестнадцатеричную кодированную версию с помощью:
System.out.println(getHexString(test));
Здесь вы получите полностью функциональный результат. Декодирование их обратно в байты даст вам именно те байты, с которых вы начали.
Используйте оператор forkJoin для ожидания массива наблюдаемых, например:
const { forkJoin, of } = rxjs; // = require("rxjs")
// simulate API call
const fetchFromApi = id => of(`result: ${id}`);
const ids = [1, 2, 3, 4, 5];
const requests = ids.map(fetchFromApi);
forkJoin(requests)
.subscribe(e => console.log(e))
<script src="https://unpkg.com/rxjs@6.3.3/bundles/rxjs.umd.min.js"></script>