Uda*_*nth 7 java bytearray arraylist
我想将波形文件中的字节读入数组.由于读取的字节数取决于波形文件的大小,因此我创建了一个最大大小为1000000的字节数组.但这会导致数组末尾出现空值.所以,我想创建一个动态增加的数组,我发现ArrayList是解决方案.但是AudioInputStream类的read()函数只将字节读入字节数组!我如何将值传递给ArrayList?
Kaj*_*Kaj 25
ArrayList不是解决方案,ByteArrayOutputStream就是解决方案.创建一个ByteArrayOutputStream写入你的字节,然后调用toByteArray()以获取字节.
您的代码应该是什么样子的示例:
in = new BufferedInputStream(inputStream, 1024*32);
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] dataBuffer = new byte[1024 * 16];
int size = 0;
while ((size = in.read(dataBuffer)) != -1) {
out.write(dataBuffer, 0, size);
}
byte[] bytes = out.toByteArray();
Run Code Online (Sandbox Code Playgroud)
Buh*_*ndi 16
你可以有一个像这样的字节数组:
List<Byte> arrays = new ArrayList<Byte>();
Run Code Online (Sandbox Code Playgroud)
将其转换回数组
Byte[] soundBytes = arrays.toArray(new Byte[arrays.size()]);
Run Code Online (Sandbox Code Playgroud)
(然后,你就必须写一个转换器转换Byte[]到byte[]).
编辑:您正在使用List<Byte>错了,我就告诉你如何阅读AudioInputStream与简单ByteArrayOutputStream.
AudioInputStream ais = ....;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int read;
while((read = ais.read()) != -1) {
baos.write(read);
}
byte[] soundBytes = baos.toByteArray();
Run Code Online (Sandbox Code Playgroud)
IOException如果frameSize不等于,则抛出PS An 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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
68933 次 |
| 最近记录: |