2012-03-19 1 views
0

Я пытаюсь прочитать WAV-файл в массив байтов, который будет отправлен по сокетному соединению и воспроизведен с другой стороны. Я столкнулся с проблемой, когда данные заголовка файла будут прочитаны, остальная часть файла просто заполнит массив байтов 0. Вот пример кода. Я пробовал несколько других подходов, но все они дают одинаковый результат.Чтение .wav-файла в массив байтов в Java

File audioIn = new File("assets/file.wav"); 
byte [] byteArray = new byte[filesize]; 
FileInputStream fileInStream = new FileInputStream(audioIn); 
fileInStream.read(byteArray); 

Вот данные отладки, взятые из отдельных байтов. Информация заголовка соответствует тому, что ранее извлекли методы Java. Из того, что я прочитал, звуковые данные должны начинаться с байт [44], однако я получаю результаты ниже. Остальная часть массива заполняется 0s.

Byte 0: 82 
Byte 1: 73 
Byte 2: 70 
Byte 3: 70 
... 
Byte 41: 97 
Byte 42: 0 
Byte 43: -68 
Byte 44: -1 
Byte 45: 1 
Byte 46: 0 
Byte 47: 0 
... 

Следует также отметить, что данные заголовка будет отброшен здесь информация WAVE будет отправлен в течение заранее. Заранее спасибо за вашу помощь.

+0

Соответствуют ли байт содержимому 'file.wave'? Для проверки используйте шестнадцатеричный просмотрщик ('od -h' в Unix/Linux/OSX). –

+0

1) Я бы отправил весь файл (лишние 44 байта в голове будут иметь мало значения.) 2) Вы понимаете, что многие образцы звука начинаются с «0 объемного звука» до создания до нормального объема, не так ли? –

ответ

3

FileInputStream.read не заполняет массив байтов данными; он читает только то, что можно прочитать за один раз. Вам нужно было бы позвонить в цикл, чтобы все прочитать.

В качестве альтернативы вы можете использовать метод DataInputStream.readFully. Если вы используете Java 7, вы можете использовать Files.readAllBytes.

1

Вы также можете ознакомиться с библиотекой Apache/Commons IO, там есть что-то полезное для работы с общими задачами ввода-вывода, такими как чтение всего файла в массив байтов или закрытие содержимого шаблона ввода-вывода.

 Смежные вопросы

  • Нет связанных вопросов^_^