Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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
Android 将对象保存到二进制文件到外部存储器?(安卓)_Android_Bitmap_Storage_External - Fatal编程技术网

Android 将对象保存到二进制文件到外部存储器?(安卓)

Android 将对象保存到二进制文件到外部存储器?(安卓),android,bitmap,storage,external,Android,Bitmap,Storage,External,这是我创建的一段代码,用于将图像的“库”保存到外部存储器,以便在另一个应用程序中使用该文件。这是一个二进制文件,其中包含对象的ArrayList 这是做主要工作的方法 public void createLib() { File fl = new File("/mnt/sdcard/imgs"); File[] rawLib = fl.listFiles(); TextView text = (TextView) findViewById(R.id.tx

这是我创建的一段代码,用于将图像的“库”保存到外部存储器,以便在另一个应用程序中使用该文件。这是一个二进制文件,其中包含对象的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();
        }
findMidColor()是我的方法,它工作得很好,所以没有问题

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

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

在块类中,您可以使用指向
位图
的路径以及
从该路径返回
位图
的方法,而不是使用
位图
对象

class Block{
   String bitmapPath;
   int mozColor;
   Bitmap bmp(){
      //do something here to encode bitmap from file
   }
}
每次都必须将位图保存到特定路径,并将其存储到
Block.bitmapPath

您可以轻松找到如何将
位图
保存到
文件
并从
文件
中检索位图的数据(像素)不保存在位图对象中。他们住在垃圾堆的某个地方。您现在只保存对错误位置的引用

在块类中,您可以使用指向
位图
的路径以及
从该路径返回
位图
的方法,而不是使用
位图
对象

class Block{
   String bitmapPath;
   int mozColor;
   Bitmap bmp(){
      //do something here to encode bitmap from file
   }
}
每次都必须将位图保存到特定路径,并将其存储到
Block.bitmapPath

您可以轻松找到如何将
位图
保存到
文件
并从
文件