android如何将db复制到模拟器中,如何阅读LARGE Sqlite文件复制到Android模拟器或资产文件夹中的设备?...

本文探讨了一个在Android应用中遇到的问题:当尝试读取大于8MB的大文件时出现IOException异常。文中提供了具体的代码片段并描述了调试过程中遇到的问题。作者怀疑异常由文件大小引起,并寻求帮助以了解Android文件I/O的限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

但是它再拿IOException异常在

while ((length = myInput.read(buffer))>0){

myOutput.write(buffer, 0, length);

}

我'试图用一个大的数据库文件。 它大到> 8MB 我在Mac OS X中使用sqlite3构建了它,插入了UTF-8编码的字符串(对于我使用的是韩语), 将ko_KR作为语言环境添加了android_meta表,如上所述。

然而,当我调试,它不断出现在

length=myInput.read(buffer)

IOException异常,我怀疑它是由试图读取大文件引起的。如果没有,我不知道为什么。 我使用更小的文本文件测试了相同的代码,并且它工作正常。

谁能帮我这个?我搜遍了很多地方,但没有一个地方给我明确的答案,或者很好的解决方案。 有效或容易的好意思。

我会尝试使用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

为什么需要本地如此多的数据?看起来像移动应用程序开发的一个基本问题......一些Android设备仍然有限的内存,重新设计你的应用程序,以便它从网上读取并在本地缓存少量数据,8MB对于只有一个应用程序看起来很多(考虑复杂的应用程序,如谷歌地图,只需8MB ...) –

2010-05-28 19:24:31

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值