java - 在Java中将.wav文件读取到字节数组

标签 java sockets audio wav javasound

我正在尝试将 .wav 文件读入字节数组,以通过套接字连接发送并在另一端播放。一旦读取文件的头数据,我就会遇到一个问题,文件的其余部分只是用 0 填充字节数组。这是示例代码。我尝试了其他几种方法,但都产生相同的结果。

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

这是从各个字节获取的调试数据。 header 信息与 Java 方法之前提取的信息相对应。根据我所读到的内容,声音数据应该从字节[44]开始,但是我得到了下面的结果。数组的其余部分用 0 填充。

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 信息将被预先发送过来。预先感谢您的帮助。

最佳答案

FileInputStream.read 不会用数据填充字节数组;它只读取一次可以读取的内容。您必须循环调用它才能读取所有内容。

您也可以使用DataInputStream.readFully方法。如果您使用的是 Java 7,您可以使用 Files.readAllBytes .

关于java - 在Java中将.wav文件读取到字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9779611/

相关文章:

c# - NET中的SocketAsyncEventArgs和线程安全

java - 我必须在 Spring boot 中使用 POST 方法(Restfull)从 MySQL Db 表中搜索 where 子句中的多个参数?

java - 使用类路径时,在 Java Spring 中哪里设置 application.yml 的源;当前使用子模块

java - 使用 Java 进行排序和二分搜索

c - 如何使用 tcpserver 程序中的线程通过服务器在两个客户端之间进行通信?

windows - Windows 服务器上允许的理论最大打开 TCP 连接数是多少

iphone - 创建音高变化代码?

file - Asterisk 作为文件转换器

audio - 在 Flash/Actionscript 中以 2 倍速度播放声音

java - 以步长循环遍历点,包括终点