江苏廉政建设网站,承德招聘信息网,用xampp来搭建wordpress建站环境,合肥网页设计就业序列化是指将对象的状态信息转换为可以存储或传输的形式的过程。 在Java中创建的对象#xff0c;只要没有被回收就可以被复用#xff0c;但是#xff0c;创建的这些对象都是存在于JVM的堆内存中#xff0c;JVM处于运行状态时候#xff0c;这些对象可以复用#xff0c; 但…序列化是指将对象的状态信息转换为可以存储或传输的形式的过程。 在Java中创建的对象只要没有被回收就可以被复用但是创建的这些对象都是存在于JVM的堆内存中JVM处于运行状态时候这些对象可以复用 但是一旦JVM停止这些对象的状态也就丢失了。 在实际生活中需要将对象持久化需要的时候再重新读取出来通过对象序列化可以将对象的状态保存为字节数组需要的时候再将字节数组反序列化为对象。 对象序列化可以很容易的在JVM中的活动对象和字节数组(流)之间转换广泛用于RMI(远程方法调用)以及网络传输中。 特别注意 a.静态成员变量属于类不属于对象所以不会参与序列化(对象序列化保存的是对象的“状态”也就是它的成员变量因此序列化不会关注静态变量) b.用transient关键字标记的成员变量不参与序列化(在被反序列化后transient 变量的值被设为初始值如 int 型的是 0对象型的是 null) (1).Serializable 1 uses-permission android:nameandroid.permission.READ_EXTERNAL_STORAGE/uses-permission
2 uses-permission android:nameandroid.permission.WRITE_EXTERNAL_STORAGE/uses-permission
复制代码 1 import java.io.Serializable; 2 3 public class StudentSerializable implements Serializable { 4 5 //指定serialVersionUID 6 //因为原则上序列化后的数据中的serialVersionUID只有和当前类的serialVersionUID相同时才能被正常的反序列化 7 //最好自己指定UID或者系统生成因为如果增加或者删除了某些成员变量那么系统就会重新生成hash值然后赋给UID导致反序列化时候crash 8 private static final long serialVersionUID 10000000000000000L; 9
10 private int Uid;
11 private String Name ;
12
13 public int getUid() {
14 return Uid;
15 }
16 public void setUid(int uid) {
17 Uid uid;
18 }
19 public String getName() {
20 return Name;
21 }
22 public void setName(String name) {
23 Name name;
24 }
25 Override
26 public String toString() {
27 return StudentSerializable [Uid Uid , Name Name ];
28 }
29
30 }
复制代码
复制代码 1 private void DealSerializable() throws IOException { 2 // Initializes The Object 3 StudentSerializable stu new StudentSerializable(); 4 stu.setUid(9027); 5 stu.setName(fish); 6 7 File extDir Environment.getExternalStorageDirectory(); 8 String filename tempFile.txt; 9 File fullFilename new File(extDir, filename);
10
11 try {
12 fullFilename.createNewFile();
13 fullFilename.setWritable(Boolean.TRUE);
14 fullFilename.setReadable(Boolean.TRUE);
15
16 } catch (IOException e) {
17 // TODO Auto-generated catch block
18 e.printStackTrace();
19 }
20
21 // Write Obj to File
22 ObjectOutputStream oos null;
23 try {
24 oos new ObjectOutputStream(new FileOutputStream(fullFilename.getAbsoluteFile()));
25 oos.writeObject(stu);
26 } catch (IOException e) {
27 e.printStackTrace();
28 } finally {
29 //oos.close();
30 }
31
32 // Read Obj from File
33 //File file new File(tempFile.txt);
34 ObjectInputStream ois null;
35 try {
36 ois new ObjectInputStream(new FileInputStream(fullFilename.getAbsoluteFile()));
37 StudentSerializable newStu (StudentSerializable) ois.readObject();
38 System.out.println(newStu);
39 } catch (IOException e) {
40 e.printStackTrace();
41 } catch (ClassNotFoundException e) {
42 e.printStackTrace();
43 } finally {
44 //ois.close();
45 }
46 }
复制代码 在使用时通常是和ObjectOutputStream 以及 ObjectInputStream 配套一起使用准确的说是和ObjectOutputStream 里的writeObject () 和 ObjectInputStream 里的 readObject () 一起使用。writeObject()方法是最重要的方法用于对象序列化。如果对象包含其他对象的引用则writeObject()方法递归序列化这些对象。 (2).Parcelable 复制代码 1 import android.os.Parcel; 2 import android.os.Parcelable; 3 4 public class StudentParcelable implements Parcelable{ 5 6 private int Uid; 7 private String Name ; 8 9 private Book book ;
10
11 public StudentParcelable(int uid, String name) {
12 super();
13 Uid uid;
14 Name name;
15 }
16
17 public int getUid() {
18 return Uid;
19 }
20 public void setUid(int uid) {
21 Uid uid;
22 }
23 public String getName() {
24 return Name;
25 }
26 public void setName(String name) {
27 Name name;
28 }
29
30
31 //功能返回当前对象的内容描述如果含有文件描述符返回1
32 //即CONTENTS_FILE_DESCRIPTOR
33 //几乎所有情况都会返回0
34 Override
35 public int describeContents() {
36 // TODO Auto-generated method stub
37 return 0;
38 }
39
40 /**
41 * 序列化功能由writeToParcel完成最终通过Parcel的一系列Write方法完成
42 */
43 //功能将当前对象写入序列化结构中其中flags标识有两种值0或1
44 //为1时标识当前对象需要作为返回值返回不能立刻释放资源即PARCELABLE_WRITE_RETURN_VALUE
45 //不过几乎所有情况都为0
46 Override
47 public void writeToParcel(Parcel dest, int flags) {
48 // TODO Auto-generated method stub
49 dest.writeInt(Uid);
50 dest.writeString(Name);
51 dest.writeParcelable(book, 0);
52 }
53
54 /**
55 * 反序列化由CREATOR来完成其内部标明了如何创建序列化对象和数组
56 * 并通过Parcel的一系列read方法来完成反序列化
57 */
58 public StudentParcelable(Parcel source){
59 Uid source.readInt();
60 Name