主要思路:保存时是将对象用Base64转换成String,然后保存,读取读取出来的String转换成对象。
保存代码如下:
public void setUserInfo(UserInfo mBean) { try { // 创建字节输出流 ByteArrayOutputStream baos = new ByteArrayOutputStream(); // 创建对象输出流,并封装字节流 ObjectOutputStream oos = new ObjectOutputStream(baos); // 将对象写入字节流 oos.writeObject(mBean); // 将字节流编码成base64的字符窜 String mBeanStr = new String(Base64.encodeBase64(baos.toByteArray())); //写入到本地 ShareManager.setValue(KApplication.mContext, Constant.USER_INFO, mBeanStr); } catch (IOException e) { e.printStackTrace(); } }
读取的代码如下:
public UserInfo getUserInfo() { UserInfo mBean = null; try { //读取本地缓存数据 String userInfo = ShareManager.getValue(KApplication.mContext, Constant.USER_INFO); //读取字节 byte[] base64 = Base64.decodeBase64(userInfo.getBytes()); //封装到字节流 ByteArrayInputStream bais = new ByteArrayInputStream(base64); //再次封装 ObjectInputStream bis = new ObjectInputStream(bais); //转换成对象 mBean = (UserInfo) bis.readObject(); } catch (StreamCorruptedException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } return mBean; }
注意:保存的对象需要实现序列化接口,否则会抛异常。