「Google it」と言う前に、いくつか興味深い記事を見つけましたが、何も機能しませんでした。Java mp3入力ストリームをバイト配列に変換しますか?
私は、ウェブサイトからバイトストリームにmp3ファイルを変換する必要があります。後でファイルにローカルで保存することができます。
Url url = new Url("someUrl");
URLConnection conn = url.openConnection();
byte[] result = inputStreamToByteArray(conn.getInputStream());
// .... some code here
byteArrayToFile(result, "tmp.mp3");
public byte[] inputStreamToByteArray(InputStream inStream){
InputStreamReader in = new InputStreamReader(inStream):
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int next = inStream.read();
while (next > -1){
baos.write(next);
next = in.read();
}
byte[] result = baos.toByteArray();
baos.flush();
in.close();
return result;
}
public void byteArrayToFile(byte[] byteArray, String outFilePath){
FileOutputStream fos = new FileOutputStream(outFilePath);
fos.write(byteArray);
fos.close()
}
コードがエラーなしでコンパイル:
は、ここに私のコード(最も重要な部分)です。 URLへの接続が有効です。適切な応答を送信します。
問題は変換のどこかにあります。 byteArrayToFile()の後ろに適切な長さの新しいファイルがディスクにもありますが、どのプレーヤーでも再生できません。長さ00:00と再生されません。ところで
。私は第三者libsを避けたいと思います。他に何も機能していない場合でも...
ありがとうございます。はい、私は例外処理を持って、ちょうど私のポストのコードでそれを書いていない。 Btw。とにかくダイナミックなサイズのバッファを取得するには?たとえば、リストを使用して、それを返すときに配列に変換するとしますか? – ZolaKt
@ ZolaKt:ByteArrayOutputStreamという動的なサイズのバッファがあります。 8Kバッファーは非常に一時的なストレージとして存在します。なぜあなたは動的にサイズを変えたいのですか? –
私は知らない。私はちょうど "ハードコードされた"数字が好きではない:)しかし、あなたは正しい、これは行く方法です。どうもありがとうございました。 – ZolaKt