2011-05-18 72 views
1

針對嵌入式系統進行開發時,面臨在桌面環境中開發時所面臨的許多挑戰。我目前面臨的挑戰是將大文件(可能10-100MB)轉換爲字節數組,同時牢記我有限的資源(內存)。兩個implemetation我一直使用造成可怕的將大文件轉換爲Android上的字節數組

java.lang.OutOfMemoryError 

我開始這個implemeting自己:

/** 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公地IO處理這對我來說,但同樣的錯誤。這是可以在Android等移動環境中完成的事情,還是我運氣不好?

回答

1

您不能在Android中將這麼大的文件放入內存中,因爲根據設備的不同,Android中的堆大小限制在16-32MB左右。所以,你應該以某種方式重新設計你的應用程序。

1

要將文件轉換爲字節數組,您可以使用DatanputStream。

byte[] lData = new byte[file_length]; 

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

要正確加載大文件,也許可以通過塊讀取它們,並使用代理對象來操作部分加載的文件。

相關問題