1. ホーム
  2. java

[解決済み] バイトのArrayListを作成する

2022-02-15 09:33:51

質問

waveファイルからバイト単位で配列に読み込みたい。読み込むバイト数はwaveファイルのサイズに依存するため、最大サイズ1000000のバイト配列を作成しています。しかし、これでは配列の末尾に空の値が入ってしまいます。そこで、動的に増加する配列を作成したいと考えたところ、ArrayListが解決策になることがわかりました。しかし、AudioInputStreamクラスのread()関数は、バイト配列にしかバイトを読み込めません 代わりにArrayListに値を渡すにはどうすればいいでしょうか?

解決方法は?

バイトの配列ができます。

List<Byte> arrays = new ArrayList<Byte>();

配列に戻すには

Byte[] soundBytes = arrays.toArray(new Byte[arrays.size()]);

(を変換するコンバータを記述する必要があります。 Byte[] から byte[] ).

EDITです。 を使用しています。 List<Byte> が間違っているので、読み方を紹介します。 AudioInputStream でシンプルに ByteArrayOutputStream .

AudioInputStream ais = ....;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int read;

while((read = ais.read()) != -1) {
    baos.write(read);
}

byte[] soundBytes = baos.toByteArray();

PS An IOException がスローされます。 frameSize と等しくない場合は 1 . したがって、データを読み込むには、このようにバイトバッファを使用します。

AudioInputStream ais = ....;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int bytesRead = 0;

while((bytesRead = ais.read(buffer)) != -1) {
    baos.write(buffer, 0, bytesRead);
}

byte[] soundBytes = baos.toByteArray();