簡體   English   中英

Java 讀取文件到字節數組 - 最有效的實現

[英]Java reading file to a byte array - most efficient implementation

我從 android 設備的 SD 卡中讀取圖像文件。 由於 memory 泄漏,這會導致 memory 致命錯誤。 我已將其范圍縮小到 GC 未刪除的 1 字節 arrays 的分配。 我使用 FileInputStream 讀取文件是否有更有效的方法來執行此操作? 您能看到 memory 泄漏的原因嗎? 謝謝

    private String getHexFileString(File _file)
    {
        byte[] byteStream = new byte[(int) _file.length()];
        String fileHexString = null;
        try
        {
            FileInputStream fis = new FileInputStream(_file);
            fis.read(byteStream);
            fis.close();
            fis = null;
            fileHexString = byteArrayToHexString(byteStream);
        }
        catch (FileNotFoundException e1) 
        {   actLog.addMessage(new ErrorMessage(e1));    }
        catch (IOException e2) 
        {   actLog.addMessage(new ErrorMessage(e2));    }
        catch(OutOfMemoryError e3)
        {   actLog.addMessage(new ErrorMessage(e3));    }


        return fileHexString;
    }

/**
 * This method formats a byte-array into a hex string
 * 
 * @param b byte-array
 * @return hex string
 */
     public String byteArrayToHexString(byte[] b) 
     {
        char[] hexVal = new char[b.length * 2];
        int value = 0;
        for (int i = 0; i < b.length; i++) 
        {
             value = (b[i] + 256) % 256;
             hexVal[i * 2 + 0] = kDigits[value >> 4];
             hexVal[i * 2 + 1] = kDigits[value & 0x0f];
        }
        return new String(hexVal);
     }        

如果您在閱讀時發生了一些異常,您將不會關閉該文件。 最后最好使用塊

您可能會發現轉換為十六進制字符串的時間和 memory 比讀取文件要昂貴得多。 即字符串將大 4 倍。

如果您想提高效率並避免用完 memory,您應該使用返回 byte[] 的方法並對該數組進行操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM