當前位置:首頁 » 安卓系統 » android序列化

android序列化

發布時間: 2022-03-07 07:04:51

『壹』 Android是怎麼對對數據源中list<String>欄位進行Parcelable序列化的

ArrayList<String> photos;

寫入

dest.writeStringList(photos);

讀取

this.photos=new ArrayList<>();

in.readStringList(this.photos);

注意加粗地方,另一個人回答錯了!

『貳』 android list可以序列化嗎

public static void main(String[] args) throws IOException{ List list=new ArrayList(); Date now=new Date(); list.add(now); list.add(new Date(now.getTime()+8888888)); ByteArrayOutputStream byteStream=new ByteArrayOutputStream();

『叄』 怎麼序列化android.graphics.Path

繼承 android.graphics.Path 類,重寫 moveTo, lineTo 等方法,記錄下 path 繪制的每一點的左邊數據;反序列化的時候調用 「drawThisPath」 重繪 path。
相關代碼:
public class CustomPath extends Path implements Serializable {

private static final long serialVersionUID = -5974912367682897467L;

private ArrayList<PathAction> actions = new ArrayList<CustomPath.PathAction>();

private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException{
in.defaultReadObject();
drawThisPath();
}

@Override
public void moveTo(float x, float y) {
actions.add(new ActionMove(x, y));
super.moveTo(x, y);
}

『肆』 如何用Android studio快速實現對象的序列化介面

方法/步驟

1、在線安裝

從Android studio的菜單欄里選擇「Preferences」,然後點擊「Plugins」選擇底部的「Browser repositories」然後再搜索框中輸入parcelable,按回車之後選擇搜索結果的第一個,android parcelable code generator點擊右邊的「install plugin」按鈕進行安裝即可。

2、由於網路原因有些用戶可能無法使用在線安裝,這里提供離線安裝步驟

打開網路直接搜索「plugins jetbrains」第一個就是。打開官網,在搜索欄里搜索關鍵字:parcelable,點擊「go」進行搜索。

3、看到搜索結果,點擊第二個,android parcelable code generator

4、看到最新版本為0.6.2,點擊「Download」,下載plugin的jar文件。

5、從Android studio的菜單欄里選擇「Preferences」,然後點擊「Plugins」,從底部選擇「install plugin from disk...」找到下載的文件android-parcelable-intellij-plugin.jar選擇「choose」即可

7、在entity包下新建一個測試的實體類:Person.java 添加三個私有變數lastName,firstName,age;並設置添加其get set方法。

8、在Person.java 文件中,空白地方滑鼠右擊,選擇「Generat...」然後選擇「parcelable」之後選擇需要序列化的欄位,點擊「OK」

『伍』 java android 實現parcelable序列化,為什麼必須要實現CREATOR

你好:
Android序列化對象主要有兩種方法,實現Serializable介面、或者實現Parcelable介面。實現Serializable介面是Java SE本身就支持的,而Parcelable是Android特有的功能,效率比實現Serializable介面高,而且還可以用在IPC中。實現Serializable介面非常簡單,聲明一下就可以了,而實現Parcelable介面稍微復雜一些,但效率更高,推薦用這種方法提高性能。下面就介紹一下實現Parcelable介面的方法
通過實現Parcelable介面序列化對象的步驟:
1、聲明實現介面Parcelable
2、實現Parcelable的方法writeToParcel,將你的對象序列化為一個Parcel對象
3、實例化靜態內部對象CREATOR實現介面Parcelable.Creator:
Java代碼
public static final Parcelable.Creator<T> CREATOR

其中public static final一個都不能少,內部對象CREATOR的名稱也不能改變,必須全部大寫。
4、完成CREATOR的代碼,實現方法createFromParcel,將Parcel對象反序列化為你的對象

簡而言之:通過writeToParcel將你的對象映射成Parcel對象,再通過createFromParcel將Parcel對象映射成你的對象。也可以將Parcel看成是一個流,通過writeToParcel把對象寫到流裡面,在通過createFromParcel從流里讀取對象,只不過這個過程需要你來實現,因此寫的順序和讀的順序必須一致。

Parcel對象可以通過以下方法寫入或讀取byte, double, float, int, long, String這6種類型變數。

『陸』 Android兩種序列化的區別和作用

對於Serializable,類只需要實現Serializable介面,並提供一個序列化版本id(serialVersionUID)即可。而Parcelable則需要實現writeToParcel、describeContents函數以及靜態的CREATOR變數,實際上就是將如何打包和解包的工作自己來定義,而序列化的這些操作完全由底層實現。

『柒』 android內部類怎麼序列化

非靜態內部類的實例,會隱含保存一個指向其外部類實例的引用。如果進行序列化,估計會有問題。

如果有可能的話,對於需要序列化的實例,最好不要使用非靜態的內部類

『捌』 android 序列化怎麼使用

Android 中實現序列化有兩個選擇:

一是實現Serializable介面(是JavaSE本身就支持的),

一是實現Parcelable介面(是Android特 有功能,效率比實現Serializable介面高效,可用於Intent數據傳遞,也可以用於進程間通信(IPC))。

實現Serializable接 口非常簡單,聲明一下就可以了,而實現Parcelable介面稍微復雜一些,但效率更高,推薦用這種方法提高性能。

選擇序列化方法的原則

1)在使用內存的時候,Parcelable比Serializable性能高,所以推薦使用Parcelable。

2)Serializable在序列化的時候會產生大量的臨時變數,從而引起頻繁的GC。

3)Parcelable不能使用在要將數據存儲在磁碟上的情況,因為Parcelable不能很好的保證數據的持續性在外界有變化的情況下。盡管Serializable效率低點,但此時還是建議使用Serializable

『玖』 Android Parcelable和Serializable的區別

本文主要介紹Parcelable和Serializable的作用、效率、區別及選擇,關於Serializable的介紹見Java 序列化的高級認識。

1、作用
Serializable的作用是為了保存對象的屬性到本地文件、資料庫、網路流、rmi以方便數據傳輸,當然這種傳輸可以是程序內的也可以是兩個程序間的。而Android的Parcelable的設計初衷是因為Serializable效率過慢,為了在程序內不同組件間以及不同Android程序間(AIDL)高效的傳輸數據而設計,這些數據僅在內存中存在,Parcelable是通過IBinder通信的消息的載體。
從上面的設計上我們就可以看出優劣了。

2、效率及選擇
Parcelable的性能比Serializable好,在內存開銷方面較小,所以在內存間數據傳輸時推薦使用Parcelable,如activity間傳輸數據,而Serializable可將數據持久化方便保存,所以在需要保存或網路傳輸數據時選擇Serializable,因為android不同版本Parcelable可能不同,所以不推薦使用Parcelable進行數據持久化

3、編程實現
對於Serializable,類只需要實現Serializable介面,並提供一個序列化版本id(serialVersionUID)即可。而Parcelable則需要實現writeToParcel、describeContents函數以及靜態的CREATOR變數,實際上就是將如何打包和解包的工作自己來定義,而序列化的這些操作完全由底層實現。
Parcelable的一個實現例子如下
[java] view plain print?
public class MyParcelable implements Parcelable {
private int mData;
private String mStr;

public int describeContents() {
return 0;
}

// 寫數據進行保存
public void writeToParcel(Parcel out, int flags) {
out.writeInt(mData);
out.writeString(mStr);
}

// 用來創建自定義的Parcelable的對象
public static final Parcelable.Creator<MyParcelable> CREATOR
= new Parcelable.Creator<MyParcelable>() {
public MyParcelable createFromParcel(Parcel in) {
return new MyParcelable(in);
}

public MyParcelable[] newArray(int size) {
return new MyParcelable[size];
}
};

// 讀數據進行恢復
private MyParcelable(Parcel in) {
mData = in.readInt();
mStr = in.readString();
}
}
public class MyParcelable implements Parcelable {
private int mData;
private String mStr;

public int describeContents() {
return 0;
}

// 寫數據進行保存
public void writeToParcel(Parcel out, int flags) {
out.writeInt(mData);
out.writeString(mStr);
}

// 用來創建自定義的Parcelable的對象
public static final Parcelable.Creator<MyParcelable> CREATOR
= new Parcelable.Creator<MyParcelable>() {
public MyParcelable createFromParcel(Parcel in) {
return new MyParcelable(in);
}

public MyParcelable[] newArray(int size) {
return new MyParcelable[size];
}
};

// 讀數據進行恢復
private MyParcelable(Parcel in) {
mData = in.readInt();
mStr = in.readString();
}
}

從上面我們可以看出Parcel的寫入和讀出順序是一致的。如果元素是list讀出時需要先new一個ArrayList傳入,否則會報空指針異常。如下:
list = new ArrayList<String>();
in.readStringList(list);

PS: 在自己使用時,read數據時誤將前面int數據當作long讀出,結果後面的順序錯亂,報如下異常,當類欄位較多時務必保持寫入和讀取的類型及順序一致。
11-21 20:14:10.317: E/AndroidRuntime(21114): Caused by: java.lang.RuntimeException: Parcel android.os.Parcel@4126ed60: Unmarshalling unknown type code 3014773 at offset 164

4、高級功能上
Serializable序列化不保存靜態變數,可以使用Transient關鍵字對部分欄位不進行序列化,也可以覆蓋writeObject、readObject方法以實現序列化過程自定義

『拾』 android 序列化傳遞對象是同一個對象嗎

putSerializable,是通過對象的序列化和反序列化來實現Activity之間對象的傳遞的,所以這種方法得到的就是兩個完全不一樣的對象(Activity2中的對象obj就相當於new了一個新對象,然後將Activity1中的對象obj的值都賦給了它,所以可以說它們的內容是一樣的,但是對象不一樣.). 注:通過上述方法傳遞的對象obj一定要實現Serializable介面才可以哦! 一般在Activity之間是不做對象的傳遞的吧,序列化和反序列化本身就沒有一定的弊端吧(個人感覺),呵呵...而且對象都要實現Serializable介面. 如果一定要傳對象的話可以在做一些靜態的類或對象! 希望對你有幫助 ^_^!

熱點內容
紅米手機錄音文件夾 發布:2025-02-13 19:41:33 瀏覽:235
android適配屏幕 發布:2025-02-13 19:40:30 瀏覽:792
解壓球0 發布:2025-02-13 19:38:19 瀏覽:642
早春開花植物如何配置 發布:2025-02-13 19:22:19 瀏覽:50
安卓怎麼獲得root錄音許可權 發布:2025-02-13 19:21:22 瀏覽:170
訪問學者留學基金委 發布:2025-02-13 19:21:13 瀏覽:430
制定編程 發布:2025-02-13 19:11:39 瀏覽:58
微商相冊安卓與蘋果機哪個方便 發布:2025-02-13 19:10:02 瀏覽:6
優酷視頻緩存設置 發布:2025-02-13 19:04:03 瀏覽:156
如何識別網路配置 發布:2025-02-13 19:04:02 瀏覽:300