【问题标题】:Saving objects to binary file to external storage? (Android)将对象保存到二进制文件到外部存储? (安卓)
【发布时间】:2012-09-20 20:39:33
【问题描述】:

这是我创建的代码,用于将图像“库”保存到外部存储,以便在另一个应用程序中使用该文件。这是一个包含对象 ArrayList 的二进制文件。

这是主要工作的方法。

public void createLib()
{       
    File fl = new File("/mnt/sdcard/imgs");

    File[] rawLib = fl.listFiles();

    TextView text = (TextView) findViewById(R.id.txt1);

    ArrayList<Block> myList = new ArrayList<Block>();

    try{    
        for (int i = 0; i < rawLib.length; i++)
        {
            FileInputStream fis = new FileInputStream(rawLib[i]);

            Bitmap bmp = BitmapFactory.decodeStream(fis);

            Block tmpBlock = new Block();

            tmpBlock.bmp = bmp;
            tmpBlock.mozColor = findMidColor(bmp);

            myList.add(tmpBlock);
        }           
       }
        catch(Exception exc)
        {
            exc.printStackTrace();
        }

        try
        {           
            String root = Environment.getExternalStorageDirectory().toString();
            File myDir = new File(root + "/saved_images");    
            myDir.mkdirs();

            File file = new File (myDir, "library.lib");

            FileOutputStream fos = new FileOutputStream(file);

            ObjectOutputStream save = new ObjectOutputStream(fos);

            save.writeObject(myList);

            save.close();
        }

        catch (Exception exc)
        {
             exc.printStackTrace();
        }

这是我正在使用的课程

class Block
{
    Bitmap bmp;
    int mozColor;
}

findMidColor() 是我的方法,它工作得很好,所以没有问题。

当我从模拟器外部存储中提取创建的文件时,我看到该文件的大小约为 2.5 KB,但包含图像的原始文件夹约为 2-3 兆字节。 结论是该程序仅保存指向该 bmp 的指针。有没有办法创建包含图像和整数的对象的二进制文件,并在另一个应用程序(如 ArrayList 或任何其他数组)中重用该文件?

【问题讨论】:

    标签: android bitmap storage external


    【解决方案1】:

    是的 Bitmap 的数据(像素)没有保存在 Bitmap 对象中。他们住在堆的某个地方。您现在只保存对错误位置的引用。

    在您的 Block 类中,除了拥有 Bitmap 对象之外,您还可以拥有一个到 Bitmap 的路径和一个从该路径获得 returnsBitmap 的方法。

    class Block{
       String bitmapPath;
       int mozColor;
       Bitmap bmp(){
          //do something here to encode bitmap from file
       }
    }
    

    您必须将位图保存到特定路径并每次将其存储到Block.bitmapPath

    您可以轻松找到如何将Bitmap 保存到File 并从File 检索

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-30
      • 2011-12-14
      • 2018-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 2017-06-29
      相关资源
      最近更新 更多