zoukankan      html  css  js  c++  java
  • 序列化和bitmap序列化

    记录一下,遇到的问题。activity之间intent传递数据,需要将对象序列化,同时一个对象中带有bitmap。百度了一下,很多序列化的文章,解决了自己的问题。

    序列化

    现在我尝试的序列化有两种:一种是java的序列化Serializable,一种是Android的序列化Parcelable。

    Parcelable的性能相比Serializable要高,但是使用起来没有那么的简单。

    1、Serializable序列化

    ​ 类只要implement Serializable接口即可。同时,在类中需要声明一个标识serialVersionUID,如下所示:

    private static final long serialVersionUID = 12907898L;

    这样就好了。如果,不加这个UID也可以。但是,类中少了一个属性的话,程序就会崩溃。如果加了,程序不会崩溃。

    序列化:

    User person = new User();
    ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("cache.txt"));
    out.writeObject(person);
    out.close()
    

    反序列化:

    ObjectInputStream in = new ObjectInputStream(new FileInputStream("cache.txt"));
    User user = in.readObject(user);
    in.close();
    

    Intent传递:

    intent.putExtra("personInfo", bean);
    
    User person = getIntent().getSerializableExtra("personInfo");
    
    2、Parcelable序列化,bitmap的序列化

    实现Parcelable接口,同时参照网上的教程实现bitmap的序列化,如下示例:

    public class Person implements Parcelable {
        
        //此处为静态变量。序列化时,初始化了。反序列时,还可以用。
      private static byte[] bytes;
        
      private Bitmap headBitmap; //头像
      private String level; //职位
      private String name; //姓名
      
      ......
    
      @Override
      public int describeContents() {
            return 0;
      }
    
        //对象写成序列,这些属性都是顺序的
      @Override
      public void writeToParcel(Parcel dest, int flags) {
            dest.writeString(head_url);
            bytes = getBytesFromBitmap(headBitmap);
            dest.writeByteArray(bytes);
            dest.writeString(level);
            dest.writeString(name);
      }
        
        //序列转成对象
      public static final Creator CREATOR = new Creator() {
            @Override
            public Object createFromParcel(Parcel source) {
                return new PersonBean(source);
            }
    
            @Override
            public Object[] newArray(int size) {
                return new PersonBean[size];
            }
       };
       
       private PersonBean(Parcel in){
            in.readByteArray(bytes);
            headBitmap = getBitmapFromArrayBytes(bytes);
            level = in.readString();
            name = in.readString();
        }
        
        //bitmap转byte
        private byte[] getBytesFromBitmap(Bitmap bitmap) {
            ByteArrayOutputStream outputStream = 
                new ByteArrayOutputStream();
            bitmap.compress(Bitmap.CompressFormat.PNG, 0, outputStream);
            return outputStream.toByteArray();
        }
    
        //byte转bitmap
        private Bitmap getBitmapFromArrayBytes(byte[] bytes){
            return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
        }
    }
    

    Intent传递:

    intent.putExtra("personInfo", bean);
    
    User person = getIntent().getParcelableExtra("personInfo");
    

    参照bitmap序列化:https://www.cnblogs.com/Free-Thinker/p/4635170.html

  • 相关阅读:
    阿里云HBase携X-Pack再进化,重新赋能轻量级大数据平台
    CVE漏洞—PHPCMS2008 /type.php代码注入高危漏洞预警
    傻瓜神经网络入门指南
    一起来看 rxjs
    阿里云ACE共创空间——MQ消息队列产品测试
    阿里毕玄:技术人应如何选择职业发展路线?
    MyBatsi学习
    UEditor学习
    fastJson在java后台转换json格式数据探究(二)--处理数组/List/Map
    JS获取当前年份月
  • 原文地址:https://www.cnblogs.com/wisdomzhang/p/12060732.html
Copyright © 2011-2022 走看看