2012-03-19 398 views
0

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

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

这里是从单个字节获取的调试数据。标题信息与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信息将被预先发送。在此先感谢您的帮助。

+0

上面的字节是否与'file.wave'的内容匹配?使用十六进制查看器(Unix/Linux/OSX上的“od -h”)进行验证。 – 2012-03-19 23:51:54

+0

1)我会发送整个文件(额外的44个字节在头上将没有什么区别2)你知道很多声音样本在建立到正常音量之前以'0音量声音'开始,对吧? – 2012-03-20 07:01:03

回答

3

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

或者,您可以使用DataInputStream.readFully方法。如果您使用Java 7,则可以使用Files.readAllBytes

1

您还可以查看Apache/Commons IO库,这里有一些方便的东西用于处理常见的I/O任务,如将整个文件读入字节数组或关闭输入/输出样板文件。