2012-03-19 395 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任務,如將整個文件讀入字節數組或關閉輸入/輸出樣板文件。