Serializable
অ্যান্ড্রয়েডে হাস্যকরভাবে ধীর। বর্ডারলাইন বাস্তবে অনেক ক্ষেত্রে অকেজো।
Parcel
এবং Parcelable
চমত্কারভাবে দ্রুত, তবে এটির ডকুমেন্টেশন বলছে যে আপনার অবশ্যই এটি সাধারণ-উদ্দেশ্যে সিরিয়ালায়নের জন্য সঞ্চয়স্থানে ব্যবহার করা উচিত নয়, যেহেতু অ্যান্ড্রয়েডের বিভিন্ন সংস্করণের সাথে প্রয়োগটি পরিবর্তিত হয় (যেমন কোনও ওএস আপডেট কোনও অ্যাপ্লিকেশনকে ভেঙে দিতে পারে যা এটি নির্ভর করে)।
যুক্তিসঙ্গত গতিতে ডেটা স্টোরিয়ালে ক্রমিককরণের সমস্যার সর্বোত্তম সমাধান হ'ল আপনার নিজস্ব রোল। আমি ব্যক্তিগতভাবে আমার নিজস্ব ইউটিলিটি ক্লাসগুলির একটি ব্যবহার করি যার সাথে একই রকম ইন্টারফেস রয়েছে Parcel
এবং যা সমস্ত স্ট্যান্ডার্ড প্রকারগুলি খুব দক্ষতার সাথে সিরিয়ালাইজ করতে পারে (ধরণের সুরক্ষার ব্যয়ে)। এটির একটি সংক্ষিপ্ত সংস্করণ এখানে:
public interface Packageable {
public void readFromPackage(PackageInputStream in) throws IOException ;
public void writeToPackage(PackageOutputStream out) throws IOException ;
}
public final class PackageInputStream {
private DataInputStream input;
public PackageInputStream(InputStream in) {
input = new DataInputStream(new BufferedInputStream(in));
}
public void close() throws IOException {
if (input != null) {
input.close();
input = null;
}
}
public final int readInt() throws IOException {
return input.readInt();
}
public final long readLong() throws IOException {
return input.readLong();
}
public final long[] readLongArray() throws IOException {
int c = input.readInt();
if (c == -1) {
return null;
}
long[] a = new long[c];
for (int i=0 ; i<c ; i++) {
a[i] = input.readLong();
}
return a;
}
...
public final String readString() throws IOException {
return input.readUTF();
}
public final <T extends Packageable> ArrayList<T> readPackageableList(Class<T> clazz) throws IOException {
int N = readInt();
if (N == -1) {
return null;
}
ArrayList<T> list = new ArrayList<T>();
while (N>0) {
try {
T item = (T) clazz.newInstance();
item.readFromPackage(this);
list.add(item);
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
N--;
}
return list;
}
}
public final class PackageOutputStream {
private DataOutputStream output;
public PackageOutputStream(OutputStream out) {
output = new DataOutputStream(new BufferedOutputStream(out));
}
public void close() throws IOException {
if (output != null) {
output.close();
output = null;
}
}
public final void writeInt(int val) throws IOException {
output.writeInt(val);
}
public final void writeLong(long val) throws IOException {
output.writeLong(val);
}
public final void writeLongArray(long[] val) throws IOException {
if (val == null) {
writeInt(-1);
return;
}
writeInt(val.length);
for (int i=0 ; i<val.length ; i++) {
output.writeLong(val[i]);
}
}
public final void writeFloat(float val) throws IOException {
output.writeFloat(val);
}
public final void writeDouble(double val) throws IOException {
output.writeDouble(val);
}
public final void writeString(String val) throws IOException {
if (val == null) {
output.writeUTF("");
return;
}
output.writeUTF(val);
}
public final <T extends Packageable> void writePackageableList(ArrayList<T> val) throws IOException {
if (val == null) {
writeInt(-1);
return;
}
int N = val.size();
int i=0;
writeInt(N);
while (i < N) {
Packageable item = val.get(i);
item.writeToPackage(this);
i++;
}
}
}