2011-06-08 99 views
0

我想讀取一個大小爲5.5 megabyte(一個mp3文件)的二進制文件。我嘗試了fileinputstream但它花了很多嘗試。如果可能的話,我想以最小的浪費時間閱讀文件。如何從二進制文件中讀取數據?

+0

當然這是可能的。你的具體問題是什麼? 「需要多少次」意味着什麼? – musiKk 2011-06-08 10:48:41

+0

例如,當我想讀取該文件需要5分鐘,這不是很好。我想讀一個更不敏感 – 2011-06-08 10:49:53

+0

這是一個本地文件? – andyb 2011-06-08 10:51:24

回答

-1

試試這個:

public static void main(String[] args) throws IOException 
{ 
    InputStream i = new FileInputStream("a.mp3"); 
    byte[] contents = new byte[i.available()]; 
    i.read(contents); 
    i.close(); 
} 

基於來自@保羅籃球隊員&麗芙與可用幫助的註釋更可靠的版本的和閱讀的不可靠性。

public static void main(String[] args) throws IOException 
{ 
    File f = new File("c:\\msdia80.dll"); 
    InputStream i = new FileInputStream(f); 
    byte[] contents = new byte[(int) f.length()]; 

    int read; 
    int pos = 0; 
    while ((read = i.read(contents, pos, contents.length - pos)) >= 1) 
    { 
     pos += read; 
    } 
    i.close(); 
} 
+0

謝謝它的工作 – 2011-06-08 10:55:35

+6

這不是安全代碼。 InputStream.available()「返回可以從此輸入流讀取(或跳過)的字節數的估計值,而不會因下一次調用此輸入流的方法而被阻塞。」這不一定與文件的大小相同。 – 2011-06-08 10:56:12

+1

我很好奇最初的方法是怎樣的。 :) – musiKk 2011-06-08 10:56:32

4

您應該嘗試在FileInputStream周圍使用BufferedInputStream。它會顯着提高性能。

new BufferedInputStream(fileInputStream, 8192 /* default buffer size */); 

此外,我建議使用讀取方法,它需要一個字節數組並填充它而不是普通讀取。

+3

默認值爲8192,或許您正在考慮4096. – 2011-06-08 10:58:55

+1

感謝您的提示。我更新了我的答案。 – 2011-06-08 11:40:33

2

FileUtils中有用於一次讀取文件的實用工具。對於最大100 MB的適度文件,這更簡單高效。

byte[] bytes = FileUtils.readFileToByteArray(file); // handles IOException/close() etc. 
相關問題