![](/img/trans.png)
[英]Which one is better approach so as to able to use wrapper class read() / write() method with android.content.res.Resources.openRawResource() method?
[英]Resources.openRawResource() issue Android
我在res/raw/
文件夾中有一個數據庫文件。 我正在調用Resources.openRawResource()
,文件名為R.raw.FileName
,我得到一個輸入流,但我在設備中有另一個數據庫文件,所以要將該數據庫的內容復制到我使用的設備db:
BufferedInputStream bi = new BufferedInputStream(is);
和FileOutputStream,但我得到一個例外,數據庫文件已損壞。 我該怎么辦? 我嘗試使用File
和FileInputStream
讀取文件,將路徑讀取為/res/raw/fileName
,但這也不起作用。
是的,您應該能夠使用openRawResource
將原始資源文件夾中的二進制文件復制到設備。
根據API演示(content / ReadAsset)中的示例代碼,您應該能夠使用以下代碼段的變體來讀取db文件數據。
InputStream ins = getResources().openRawResource(R.raw.my_db_file);
ByteArrayOutputStream outputStream=new ByteArrayOutputStream();
int size = 0;
// Read the entire resource into a local byte buffer.
byte[] buffer = new byte[1024];
while((size=ins.read(buffer,0,1024))>=0){
outputStream.write(buffer,0,size);
}
ins.close();
buffer=outputStream.toByteArray();
您的文件副本現在應該存在於buffer
,因此您可以使用FileOutputStream
將緩沖區保存到新文件中。
FileOutputStream fos = new FileOutputStream("mycopy.db");
fos.write(buffer);
fos.close();
InputStream.available具有嚴重的限制,絕不應用於確定可用於流式傳輸的內容的長度。
http://developer.android.com/reference/java/io/FileInputStream.html#available ():“[...]返回可以讀取或跳過的估計字節數,不會阻塞更多輸入。[。 ..]請注意,這種方法提供了這樣一種弱保證,即它在實踐中不是很有用。“
你有3個解決方案:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.