我正在从网络上下载数据库,大小介于100千字节和500千字节之间。这里是我的代码(删除无用代码):FileOutputStream真的很慢
URLConnection uConnection = downloadUrl.openConnection();
InputStream iS = uConnection.getInputStream();
BufferedInputStream bIS = new BufferedInputStream(iS);
byte[] buffer = new byte[1024];
FileOutputStream fOS = new FileOutputStream(db);
int bufferLength = 0;
while ((bufferLength = bIS.read(buffer)) > 0) {
fOS.write(buffer, 0, bufferLength);
}
fOS.close();
我的问题是,他需要很长时间才能完成while语句。我把代码搞乱了吗?对于这样的小文件不应该花那么长时间,不是吗?我在谈论1分钟,三个文件不超过1 MB ...预先感谢!
什么让你觉得这个问题是'FileOutputStream'?这个问题可能很容易被带宽下载资料。你用过类似Traceview来确定你正在花费的地方 你的时间? – CommonsWare 2012-02-11 16:40:55
我不知道Traceview是什么。我调试了代码,这是因为while语句它非常慢。我也认为,当我的InputStream-Object被实例化时,数据的下载就完成了。还是不是在那里下载的? – ezcoding 2012-02-11 16:44:53
使用缓冲区大小1024是恕我直言,一个坏主意。在智能手机中,所有媒体通常具有4096字节或更大的块大小(例如SD卡)。 – Robert 2012-02-11 16:49:58