(Кстати, код, который вы представили , не будет компилироваться без ошибок, кстати. У вас нет требуемой обработки исключений, и inputStream
должно быть InputStream
, только для начала. )
Это проблема:
InputStreamReader in = new InputStreamReader(inStream):
Вы пытаетесь читать из двоичного потока и преобразовывать его в текст. Это не текст. Вы не должны использовать что-либо, связанное с «Reader» или «Writer» для двоичных данных, таких как файл MP3.
Вот как должен выглядеть ваш inputStreamToByteArray
метод (или используйте Guava и его ByteStreams.toByteArray
метод ):
public byte[] inputStreamToByteArray(InputStream inStream) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[8192];
int bytesRead;
while ((bytesRead = inStream.read(buffer)) > 0) {
baos.write(buffer, 0, bytesRead);
}
return baos.toByteArray();
}
Обратите внимание, что я оставил это для вызывающей стороны для очистки входного потока. Обычно тот, кто выбирает поток, также закрывает его - было бы немного странно, если бы такой метод закрывал его сам, IMO. Вы можете сделать это, если хотите, но, вероятно, в блоке finally
, чтобы вы знали, что он будет всегда закрыт, даже если было сгенерировано исключение.
Обратите внимание, что ваш "написание" кода позже не закроет файл, если есть исключение. Вы должны иметь привычку всегда закрывать потоки в finally
блоках.