基於C#完成Windows辦事狀況啟動和停滯辦事的辦法。本站提示廣大學習愛好者:(基於C#完成Windows辦事狀況啟動和停滯辦事的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是基於C#完成Windows辦事狀況啟動和停滯辦事的辦法正文
1、為什麼要序列化?
-- 把內存中的java對象可以或許在磁盤上耐久保留
-- 經由過程收集傳輸對象
-- 經由過程RMI(Remote Method Invocation 長途進程挪用)傳輸。
經由過程序列化可以把對象轉化為與平台有關的二進制流,在從新應用進步行反序列化,從新轉化為java對象。
(長途進程挪用針對散布式Java運用,對開辟人員屏障分歧JVM和收集銜接等細節,是的散布在分歧JVM上的對象仿佛存在於一個同一的JVM中,可以或許便利的通信)
2、若何讓Java對象可以被序列化?
在java裡只需讓目的類完成Serializable接口,不必完成任何辦法。Serializable接口是一種標志接口,用來標明某個類可以被序列化。
3、若何應用序列化與反序列化?
序列化:應用ObjectOutputStream對象輸入流的writeObject()辦法,可以把對象寫到輸入流中。
反序列化:應用ObjectInputStream對象寫入流的readObject()辦法,並強迫轉換為已知的目的類便可。
4、對象援用的序列化
假如一個類Person某個成員變量援用了其他類(如class PersonInfo)。即:
class Person implements Serializable{ String name; PersonInfo info; }
假如想將Person類停止序列化,那末必需要知足:PersonInfo類也可以或許序列化,即也完成了Serializable接口,
class PersonInfo implements Serializable
5、多個對象援用統一個子對象
PersonInfo info = new PersonInfo(“male”,"china"); Person xiaomi = new Person("小明",info); Person dabai = new Person("年夜白",info);
假如順次對下面三個對象序列化,本來是上面兩個對象都指向下面統一個對象,也就是指存在一個info對象,java為了避免在每一個對象序列化時序列化三個info對象,設定了假如屢次序列化統一樣java對象時,只要在第一順序列化時把這個對象轉換為字節序列輸入,以後再對它序列化只會指向第一順序列化的編號,而不會再去序列化這個對象。
6、父類序列化
假如父類完成了Serializable接口,則子類主動可序列化,不須要再顯示完成該接口。
7、應用Serializable保留自界說數據至當地的例子
MainActivity以下:
package cc.test.serializable; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.ArrayList; import android.app.Activity; import android.os.Bundle; import android.os.Environment; /** * Demo描寫: * 將ArrayList<自界說數據>在SDCard長進行存取. * * Parcelable和Serializable的差別: * 內存間數據傳輸時推舉應用Parcelable,如activity間傳輸數據 * 好比:http://blog.csdn.net/lfdfhl/article/details/10961459 * 保留到當地或許收集傳輸時推舉應用Serializable */ public class TestSerializableActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); testSerializable(); } private void testSerializable() { FileOutputStream fileOutputStream=null; ObjectOutputStream objectOutputStream =null; FileInputStream fileInputStream = null; ObjectInputStream objectInputStream = null; ArrayList<Student> studentsArrayList = new ArrayList<Student>(); Student student = null; for (int i = 1; i < 5; i++) { student = new Student(i, "小明" + i); studentsArrayList.add(student); } try { //存入數據 File file = new File(Environment.getExternalStorageDirectory().toString() + File.separator +"Test"+File.separator + "data.dat"); if (!file.getParentFile().exists()) { file.getParentFile().mkdirs(); } if (!file.exists()) { file.createNewFile(); } fileOutputStream= new FileOutputStream(file.toString()); objectOutputStream= new ObjectOutputStream(fileOutputStream); objectOutputStream.writeObject(studentsArrayList); //掏出數據 fileInputStream = new FileInputStream(file.toString()); objectInputStream = new ObjectInputStream(fileInputStream); ArrayList<Student> savedArrayList =(ArrayList<Student>) objectInputStream.readObject(); for (int i = 0; i < savedArrayList.size(); i++) { System.out.println("掏出的數據:" + savedArrayList.get(i).toString()); } } catch (Exception e) { // TODO: handle exception }finally{ if (objectOutputStream!=null) { try { objectOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } } if (fileOutputStream!=null) { try { fileOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } } if (objectInputStream!=null) { try { objectInputStream.close(); } catch (IOException e) { e.printStackTrace(); } } if (fileInputStream!=null) { try { fileInputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
Student以下:
package cc.test.serializable; import java.io.Serializable; public class Student implements Serializable { private Integer id; private String name; //留意界說此字段 public static final long serialVersionUID = 9527L; public Student() { super(); } public Student(Integer id, String name) { super(); this.id = id; this.name = name; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Student [id=" + id + ", name=" + name + "]"; } }
main.xml以下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> </LinearLayout>