在Android上将大文件转换为字节数组

时间:2011-05-18 06:58:04

标签: android file-io memory-leaks bytearray

开发嵌入式系统时,在开发桌面环境时面临许多挑战。我目前面临的挑战是将大文件(可能10-100MB)转换为字节数组,同时牢记我的有限资源(内存)。我一直在使用的两个实现导致可怕的

java.lang.OutOfMemoryError

我开始自己实施这个:

   /** Converts the given File to an array of bits. */
    private byte[] fileToBytes(File file) {

        InputStream input_stream = new BufferedInputStream(new FileInputStream(file));  
        ByteArrayOutputStream buffer = new ByteArrayOutputStream();     
        byte[] data = new byte[16384]; // 16K
        int bytes_read;
        while ((bytes_read = input_stream.read(data,0,data.length)) != -1) {
           buffer.write(data, 0, bytes_read);
        }   
        input_stream.close();               
        return buffer.toByteArray();
}

然后决定使用经过试验和测试的Apache commons-io为我处理这个问题,但同样的错误。这是可以在Android等移动环境中完成的事情,还是我运气不好?

2 个答案:

答案 0 :(得分:1)

你不能把这么大的文件放到Android的内存中,因为Android中的堆大小限制在16-32MB左右,具体取决于设备。所以,你应该以某种方式重新设计你的应用程序。

答案 1 :(得分:1)

要将文件转换为字节数组,您可以使用DatanputStream。

byte[] lData = new byte[file_length];

DataInputStream lDataIS = new DataInputStream(InputStream);
lDataIS.readFully(lData);

要正确加载大文件,也许您可​​以通过块读取它们,并使用代理对象来操作部分加载的文件。