Android 对象序列化 Java中实现Serializable序列化与Android特有的实现Parceable接口序列化操作
来源:互联网 发布:mac关闭icloud drive 编辑:程序博客网 时间:2024/05/22 17:09
1、Serializable 接口是Java提供的一个序列化空接口,它为对象提供标准的序列化与反序列化操作。使用Serializable实现序列化非常简单,只需要实现Serializable接口,在类的生命中指定一个标识,可以自动实现默认的自动序列化过程。private static final longserialVersionUID= 1L;
序列化与反序列化过程需要大量的IO操作,适用于序列化到本地或网络传输
完整的对象序列化
public class BookSerializable implements Serializable { private static final long serialVersionUID = 1L ; private String name ; private String author ; private int publishDate ; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public int getPublishDate() { return publishDate; } public void setPublishDate(int publishDate) { this.publishDate = publishDate; } @Override public String toString() { return "BookSerializable{" + "name='" + name + '\'' + ", author='" + author + '\'' + ", publishDate=" + publishDate + '}'; }}
/** * 对于使用序列化还有两点需要注意: * 1.静态成员变量属于类不属于对象,所以不参与序列化过程 * 2.用transient关键字标记的成员变量不参与序列化过程 */ BookSerializable book = new BookSerializable() ; book.setName("java 程序设计"); book.setAuthor("未知"); book.setPublishDate(1200); File file = new File("test.txt") ; if (!file.exists()){ try { file.createNewFile() ; } catch (IOException e) { e.printStackTrace(); } } //序列化到本地 try { FileOutputStream fileOS = new FileOutputStream(file) ; ObjectOutputStream objectOS = new ObjectOutputStream(fileOS) ; objectOS.writeObject(book); objectOS.flush(); objectOS.close(); fileOS.close(); } catch (IOException e) { e.printStackTrace(); } //反序列化 try { FileInputStream fileIS = new FileInputStream("test.txt") ; ObjectInputStream objectIS = new ObjectInputStream(fileIS) ; BookSerializable bookSerializable = (BookSerializable) objectIS.readObject() ; objectIS.close(); fileIS.close(); System.out.print("book-->"+bookSerializable.toString()); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); }
2、Parceable接口
Parceable接口是AndroidSDK提供的一个专门为Android应用中对象序列化与反序列化的方式
实现Parceable接口的类的实现
序列化与反序列化不需要大量的IO操作,适用于内存序列化。
public class BookParcelable implements Parcelable { private String name; private String author; private int publishDate; private List<String> list = new ArrayList<>(); private List<Integer> integerList = new ArrayList<>() ; private String address ; @Override public String toString() { return "BookParcelable{" + "name='" + name + '\'' + ", author='" + author + '\'' + ", publishDate=" + publishDate + ", list=" + list + ", integerList=" + integerList + ", address='" + address + '\'' + '}'; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public List<Integer> getIntegerList() { return integerList; } public void setIntegerList(List<Integer> integerList) { this.integerList = integerList; } public BookParcelable() { } public List<String> getList() { return list; } public void setList(List<String> list) { this.list = list; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public int getPublishDate() { return publishDate; } public void setPublishDate(int publishDate) { this.publishDate = publishDate; } protected BookParcelable(Parcel in) { //如果元素数据是list类型的时候需要: lits = new ArrayList<?> in.readList(list); //否则会出现空指针异常.并且读出和写入的数据类型必须相同. // 如果不想对部分关键字进行序列化,可以使用transient关键字来修饰以及static修饰. //Parcel 读操作 与写顺序保持一致 name = in.readString(); author = in.readString(); publishDate = in.readInt(); list = in.readArrayList(String.class.getClassLoader()) ; integerList = in.readArrayList(Integer.class.getClassLoader()) ; address = in.readString() ; } @Override public void writeToParcel(Parcel dest, int flags) { //Parcel 写操作 与对顺序相对应 dest.writeString(name); dest.writeString(author); dest.writeInt(publishDate); dest.writeList(list); dest.writeList(integerList); dest.writeString(address); } @Override public int describeContents() { return 0; } public static final Creator<BookParcelable> CREATOR = new Creator<BookParcelable>() { @Override public BookParcelable createFromParcel(Parcel in) { return new BookParcelable(in); } @Override public BookParcelable[] newArray(int size) { return new BookParcelable[size]; } };}
阅读全文
0 0
- Android 对象序列化 Java中实现Serializable序列化与Android特有的实现Parceable接口序列化操作
- Android 实现序列化:Parcelable和Serializable接口的用法
- java中实现序列化serializable接口的问题
- Serializable接口实现对象序列化
- Java中对象的序列化(实现java.io.Serializable)
- 对象的序列化实现Serializable 接口和Externalizable接口
- 实现serializable序列化接口
- java.io.Serializable接口实现序列化
- java序列化1[实现Serializable接口]
- Java序列化(实现Serializable接口)作用
- 对象的序列化与Serializable 接口
- Android序列化-Serializable接口
- android开发中对象的序列化-实现Parcelable接口.
- Android中序列化的实现?使用Serializable还是Parcelable
- Android 对象序列化 Serializable实现与Parcelabel实现的区别
- 对象的序列化,需要实现Serializable 接口
- 在Java中正确实现可序列化接口(Serializable)
- Android 实现Parcelable接口序列化对象
- android 多library混淆配置
- Maven学习总结(二)——Maven项目构建过程练习
- 要提高SQL查询效率where语句条件的先后次序应如何写
- Android侧滑菜单 仿QQ 百度贴吧 侧滑菜单 自带动画
- 输出日志到控制台和文件(Java项目)
- Android 对象序列化 Java中实现Serializable序列化与Android特有的实现Parceable接口序列化操作
- 数据结构 P36-37 算法实现 双向循环链表的插入与删除
- HttpCore和HttpClient
- 随滑动改变的动态矩形背景
- java小程序——检测密码
- systemtap安装
- 电容器“通交流、隔直流”的正确理解第一期
- 学习笔记41-寻找二叉树最近公共结点
- 错题