Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有办法在设备内存(RAM)上存储~1GB的最大容量?_Java_Android - Fatal编程技术网

Java 有没有办法在设备内存(RAM)上存储~1GB的最大容量?

Java 有没有办法在设备内存(RAM)上存储~1GB的最大容量?,java,android,Java,Android,我目前正在开发dashcam应用程序,我试图在特定的时间范围内存储图像,或者在图像太旧时删除它们,或者从中创建视频 但是,我经常遇到存储问题。我的计划是将位图缓存在设备内存中,因为最糟糕的情况是每秒60个图像,压缩位图需要一些时间,所以我只想在必要时这样做。就像从单个图像生成视频一样 我想保留NAND闪存存储的使用寿命。所以我的计划是在系统内存中保存一个位图列表,当我想要生成视频时,只收集、压缩并保存到存储器中 Sotl;dr:除了在存储中写入和删除临时数据外,有没有其他方法可以在android

我目前正在开发dashcam应用程序,我试图在特定的时间范围内存储图像,或者在图像太旧时删除它们,或者从中创建视频

但是,我经常遇到存储问题。我的计划是将位图缓存在设备内存中,因为最糟糕的情况是每秒60个图像,压缩位图需要一些时间,所以我只想在必要时这样做。就像从单个图像生成视频一样

我想保留NAND闪存存储的使用寿命。所以我的计划是在系统内存中保存一个位图列表,当我想要生成视频时,只收集、压缩并保存到存储器中

Sotl;dr:除了在存储中写入和删除临时数据外,有没有其他方法可以在android上保存约1GB的临时数据

所以我已经尝试了一些不同的方法:

  • 将其保存到存储(首先只是为了调试,但在找不到问题的解决方案后,我仍然使用此部分)

  • 我还做了一些关于在android中保存到RAM的研究。似乎你不能存储超过1MB的数据,甚至连尝试都远远不够。

  • 我还考虑过使用位图回收。 然而,我对这段代码的理解还不够透彻,甚至无法猜测这是否适用于我

    //This is what I'm using at the moment
    private void storeImage(Bitmap bitmap){
    String root = Environment.getExternalStorageDirectory().toString();
    File myDir = new File(root + "/savedImages");
    directory = myDir;
    
    image_save_path_test = root + "savedImages";
    Log.d("Directory",image_save_path_test);
    
    if(!myDir.exists())
    {
        myDir.mkdirs();
    }
    Random rng = new Random();
    int n = 10000;
    n = rng.nextInt(n);
    String fname = "Image-" + n + ".jpg";
    File file = new File(myDir, fname);
    if(file.exists())
    {
        file.delete();
    }
    try
    {
        FileOutputStream out = new FileOutputStream(file);
        image.compress(Bitmap.CompressFormat.JPEG, 90, out);
        out.flush();
        out.close();
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }}
    
我希望Android会删除临时文件,因为文档中就是这么写的。但这也是我寻求帮助的原因,所以我不知道在这里除了提前感谢之外还能说些什么

我想保留NAND闪存存储的使用寿命。所以我的计划是在系统内存中保存一个位图列表,当我想要生成视频时,只收集、压缩并保存到存储器中

这就是你问题的核心:你根本不需要这么做。现代闪存有大量的擦除周期(100000+),除此之外,如果操作系统添加磨损均衡和积极的缓存,这意味着您正在考虑一个非问题:将大型文件保存到文件系统,而不必费心重新发明这个旧的复杂且功能完美的轮子

当我想要生成视频时,收集、压缩并保存到存储器中

我认为,通过直接使用摄像机的压缩视频,而不是自己压缩原始BMP,你会更有效率。说真的,MPEG压缩比你能想到的任何东西都要好,而且成本是零,因为现在嵌入式摄像机有内置的流编码器,只要打开摄像机就可以工作


对于市场上的手机,我将更多地关注我想要生成和分析/分发的BMP和视频的具体内容(分辨率、GOP大小…),而不是如何压缩BMP或如何保护NAND的细节。

感谢您的快速回答。那么,我将继续使用当前的解决方案。但是你对cam的反馈是什么意思?你建议只录制视频文件吗?因为我读了一些关于捕获请求的时间不可靠性的文章。这是我与BMP合作的唯一原因。我只是想澄清一下。我正在使用相机来获得预览,并将其显示在textureView上。为了获得平滑的帧定时,我每x毫秒复制一次textureView的bmp。