[英]Fastest and most efficient conversion of a byte array to a 29 bit integer in 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.