[Java]SerialZable接口的使用

来源:互联网 发布:python json库 编辑:程序博客网 时间:2024/06/05 07:39

github地址:https://github.com/lixiang0/DemoLibs

对象序列化是指将程序中创建的对象的状态信息转化为可持久化或者可传输的形式。特点是:1.可传输可持久化;2.统一性。

下面我们就学习Java中如何使用SerialZable进行对象的序列化。

本次我们首先创建一个User类,然后讲User类序列化到一个文件当中,之后再从文件当中恢复持久化的User对象状态信息。

第一步.穿件User类:

package string.pub.serial.entity;import java.io.Serializable;public class User implements Serializable{    /**     * serialVersionUID和User类结构一起用来确定序列化的类是同一个类     */    private static final long serialVersionUID = 1L;    String name="ruben";    int age=26;    String sex="man";    String addr="shenzhen";    String describe="a coder";    @Override    public String toString() {        return "User [name=" + name + ", age=" + age + ", sex=" + sex + ", addr=" + addr + ", describe=" + describe                + "]";    }}

2.编写Activity类:
我们编写了一个Activity,Activity中只有一个包含TextView控件的LinearLayout。

package string.pub.serial;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.StreamCorruptedException;import android.app.Activity;import android.os.Bundle;import android.widget.LinearLayout;import android.widget.TextView;import string.pub.serial.entity.User;public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        LinearLayout ll=new LinearLayout(this);        ll.setOrientation(LinearLayout.VERTICAL);        StringBuilder sb=new StringBuilder();        //文件路径        File file=new File(this.getCacheDir().getAbsolutePath()+File.separator+"user.text");        try {            file.createNewFile();        } catch (IOException e1) {            // TODO Auto-generated catch block            e1.printStackTrace();        }        //序列化User类        try {            ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream(file));            out.writeObject(new User());        } catch (FileNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        //反序列化类        try {            ObjectInputStream in=new ObjectInputStream(new FileInputStream(file));            try {                User mUser=(User)in.readObject();                sb.append(mUser.toString());            } catch (ClassNotFoundException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        } catch (StreamCorruptedException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (FileNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        //显示反序列化之后的结果        TextView tv_content=new TextView(this);        tv_content.setText(sb.toString());        ll.addView(tv_content);        setContentView(ll);    }}

3.添加读写权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>

4.运行结果:
这里写图片描述

总结:使用java原生的Serialzable进行序列化操作时还是比较简单易用的,缺点就是I/O的开销有点大。

0 0
原创粉丝点击