2011-06-08 102 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. 
相关问题