【问题标题】:Converting large files to an array of bytes on Android在Android上将大文件转换为字节数组
【发布时间】:2011-05-18 06:58:04
【问题描述】:

为嵌入式系统进行开发会遇到许多在桌面环境中开发时没有遇到的挑战。我目前面临的挑战是将大文件(可能 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 等移动环境中完成,还是我不走运?

【问题讨论】:

    标签: android file-io memory-leaks bytearray


    【解决方案1】:

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

    byte[] lData = new byte[file_length];
    
    DataInputStream lDataIS = new DataInputStream(InputStream);
    lDataIS.readFully(lData);
    

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-04-14
        • 2013-04-12
        • 1970-01-01
        • 2012-01-28
        • 2011-02-09
        • 2014-04-14
        • 2015-09-16
        相关资源
        最近更新 更多