Memory 在blackberry上保存文件时出现内存不足警告

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

我想在SD卡上保存许多文件。当我将这些文件保存到文件夹中时,会收到内存不足的警告

设备内存太低-请关闭以下项目

应用程序崩溃了。 问题是,我可以手动放置文件夹,我没有得到的内存问题,但在应用程序中它显示,即使SD卡上有可用空间。 这是我用来保存文件的方法

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
(事实并非如此)。