我想很多人已经读过这篇文章了:
然而,它一直在
上引入IOExceptionwhile ((length = myInput.read(buffer))>0){
myOutput.write(buffer, 0, length);
}
我正在尝试使用大型DB文件。 它大于> 8MB 我在Mac OS X中使用sqlite3构建它,插入了UTF-8编码的字符串(因为我使用的是韩语), 使用ko_KR作为语言环境添加了android_meta表,如上所述。
但是,当我调试时,它会在
处继续显示IOExceptionlength=myInput.read(buffer)
我怀疑这是因为尝试阅读大文件造成的。如果没有,我不知道为什么。 我使用更小的文本文件测试了相同的代码,并且工作正常。
任何人都可以帮我解决这个问题吗?我搜索了很多地方,但没有地方给了我明确的答案,或者很好的解决方案。 良好的意义有效或容易。
我会尝试使用 BufferedInput(输出)流,但如果更简单的那个无法工作,我认为这也无效。
任何人都可以解释Android中文件输入/输出的基本限制,并且正确的解决方法可能吗? 我真的很感激任何人的体贴答案。谢谢。
更多细节:
private void copyDataBase() throws IOException{
//Open your local db as the input stream
InputStream myInput = myContext.getAssets().open(DB_NAME);
// Path to the just created empty db
String outFileName = DB_PATH + DB_NAME;
//Open the empty db as the output stream
OutputStream myOutput = new FileOutputStream(outFileName);
//transfer bytes from the inputfile to the outputfile
byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer))>0){
myOutput.write(buffer, 0, length);
}
//Close the streams
myOutput.flush();
myOutput.close();
myInput.close();
}
答案 0 :(得分:2)
任何人都可以帮我解决这个问题吗?
使用较小的文件。或者是一组较小的文件,在打开包装时将它们拼接成一个大文件。或者在第一次运行应用程序时下载数据库。
答案 1 :(得分:2)
我去过那儿。我相信RAW资源类型没有最大大小限制(而资产,或更具体地说,连接到资产的流,大小有限)。
一旦你克服了这个障碍你应该没问题 - 我手机上的数据库已超过100MB。
答案 2 :(得分:2)
将文件的扩展名更改为.mp3,例如:
答案 3 :(得分:0)
不知道它是否会对您有所帮助,但如果其他方法失败,您可以尝试使用NIO。例如,将输入流复制到fileoutput的here's an implementation。或者,您可以尝试压缩文件,看看Android unzipping工具是否可以直接解压缩到您的db文件夹。