Memory 在blackberry上保存文件时出现内存不足警告
我想在SD卡上保存许多文件。当我将这些文件保存到文件夹中时,会收到内存不足的警告 设备内存太低-请关闭以下项目 应用程序崩溃了。 问题是,我可以手动放置文件夹,我没有得到的内存问题,但在应用程序中它显示,即使SD卡上有可用空间。 这是我用来保存文件的方法Memory 在blackberry上保存文件时出现内存不足警告,memory,blackberry,java-me,Memory,Blackberry,Java Me,我想在SD卡上保存许多文件。当我将这些文件保存到文件夹中时,会收到内存不足的警告 设备内存太低-请关闭以下项目 应用程序崩溃了。 问题是,我可以手动放置文件夹,我没有得到的内存问题,但在应用程序中它显示,即使SD卡上有可用空间。 这是我用来保存文件的方法 public static void saveWebContentCache(String save_name, String url) { FileConnection fconn = null; OutputStream
public static void saveWebContentCache(String save_name, String url) {
FileConnection fconn = null;
OutputStream outputStream = null;
try {
fconn = (FileConnection) Connector.open(
NetWorkConfig.webfolder + save_name,
Connector.READ_WRITE);
if (!fconn.exists()) {
fconn.create();
outputStream = fconn.openOutputStream();
outputStream.write(getByte(url));
}
} catch (IOException e) {
Status.show("ko !");
} finally {// Close the connections
try {
if (outputStream != null) {
outputStream.close();
outputStream = null;
}
} catch (Exception e) {
}
try {
if (fconn != null) {
fconn.close();
fconn = null;
}
} catch (Exception e) {
}
}
}
对我来说,这句话看起来很可疑:
outputStream.write(getByte(url));
这是因为这样的实现意味着在将整个字节数组写入文件的OutputStream
之前,您必须在RAM中创建/保留它
相反,您可以将从http连接的inputstream
中读取小数据块与将这些数据块写入文件的OutputStream
相结合。大概是这样的:
void copyData(InputStream source, OutputStream destination) throws IOException {
byte[] buf = new byte[1024];
int len;
while ((len = source.read(buf)) > 0) {
destination.write(buf, 0, len);
}
destination.flush();
}
对我来说,这句话看起来很可疑:
outputStream.write(getByte(url));
这是因为这样的实现意味着在将整个字节数组写入文件的OutputStream
之前,您必须在RAM中创建/保留它
相反,您可以将从http连接的inputstream
中读取小数据块与将这些数据块写入文件的OutputStream
相结合。大概是这样的:
void copyData(InputStream source, OutputStream destination) throws IOException {
byte[] buf = new byte[1024];
int len;
while ((len = source.read(buf)) > 0) {
destination.write(buf, 0, len);
}
destination.flush();
}
应用程序失败的文件大小是多少?我没有静态文件。每个文件都有一个大小。但文件夹的大小约为1.8兆字节,我猜“兆字节”是兆字节?应用程序失败的文件大小是多少?我没有静态文件。每个文件都有一个大小。但文件夹的大小约为1.8 MoI,我猜“Mo”是MB?getByte(url)是数据字节[],我从url获取它以将其写入文件我不会将数据从文件复制到另一个文件。我从url获取数据,然后将其保存到文件中是的,我理解,但是我100%确定您的
getByte(url)
使用InputStream
从http连接获取byte[]
。是的,当我使用您的方法时,我得到运行时异常。这是我的输入流和输出,就像我在示例HttpConnection conn=getHttpConnection(url)中所做的那样;conn.setRequestProperty(“Cookie”,cookies);InputStream输入=连接openInputStream();有关详细信息,请查看net.rim.device.api.system.Memory
。然而,我相信如果RAM不足是问题所在,那么您应该得到一个OutOfMemoryException
(事实并非如此)。getByte(url)是我从url获取的数据字节[],用于将其写入文件。我不会将数据从文件复制到另一个文件。我从url获取数据,然后将其保存到文件中是的,我理解,但是我100%确定您的getByte(url)
使用InputStream
从http连接获取byte[]
。是的,当我使用您的方法时,我得到运行时异常。这是我的输入流和输出,就像我在示例HttpConnection conn=getHttpConnection(url)中所做的那样;conn.setRequestProperty(“Cookie”,cookies);InputStream输入=连接openInputStream();有关详细信息,请查看net.rim.device.api.system.Memory
。然而,我相信如果RAM不足是问题所在,那么您应该得到一个OutOfMemoryException
(事实并非如此)。