অ্যান্ড্রয়েড কেন বস্তুগুলিকে সিরিয়াল করার জন্য 2 টি ইন্টারফেস সরবরাহ করে? সিরিয়ালাইজযোগ্য অবজেক্টগুলি কী অ্যান্ড্রয়েড Binder
এবং এইডআইএল ফাইলগুলির সাথে বিরতি দেয়?
অ্যান্ড্রয়েড কেন বস্তুগুলিকে সিরিয়াল করার জন্য 2 টি ইন্টারফেস সরবরাহ করে? সিরিয়ালাইজযোগ্য অবজেক্টগুলি কী অ্যান্ড্রয়েড Binder
এবং এইডআইএল ফাইলগুলির সাথে বিরতি দেয়?
উত্তর:
অ্যান্ড্রয়েডে আমরা কেবল ক্রিয়াকলাপগুলিতে বস্তুগুলি পাস করতে পারি না। এটি করার জন্য অবজেক্টগুলিকে হয় বাস্তবায়ন Serializable
বা Parcelable
ইন্টারফেস করতে হবে।
Serializable
Serializable
একটি স্ট্যান্ডার্ড জাভা ইন্টারফেস। আপনি কেবল Serializable
ইন্টারফেস বাস্তবায়ন করতে এবং ওভাররাইড পদ্ধতি যুক্ত করতে পারেন । এই পদ্ধতির সাথে সমস্যাটি হ'ল প্রতিবিম্বটি ব্যবহৃত হয় এবং এটি একটি ধীর প্রক্রিয়া। এই পদ্ধতিটি প্রচুর অস্থায়ী বস্তু তৈরি করে এবং বেশ কিছুটা আবর্জনা সংগ্রহের কারণ ঘটায়। যাইহোক, Serializable
ইন্টারফেস কার্যকর করা সহজ।
নীচের উদাহরণটি দেখুন (সিরিয়ালাইজযোগ্য):
// MyObjects Serializable class
import java.io.Serializable;
import java.util.ArrayList;
import java.util.TreeMap;
import android.os.Parcel;
import android.os.Parcelable;
public class MyObjects implements Serializable {
private String name;
private int age;
public ArrayList<String> address;
public MyObjects(String name, int age, ArrayList<String> address) {
super();
this.name = name;
this.age = age;
this.address = address;
}
public ArrayList<String> getAddress() {
if (!(address == null))
return address;
else
return new ArrayList<String>();
}
public String getName() {
return name;
}
public String getAge() {
return age;
}
}
// MyObjects instance
MyObjects mObjects = new MyObjects("name", "age", "Address array here");
// Passing MyObjects instance via intent
Intent mIntent = new Intent(FromActivity.this, ToActivity.class);
mIntent.putExtra("UniqueKey", mObjects);
startActivity(mIntent);
// Getting MyObjects instance
Intent mIntent = getIntent();
MyObjects workorder = (MyObjects) mIntent.getSerializableExtra("UniqueKey");
Parcelable
Parcelable
প্রক্রিয়া তুলনায় অনেক দ্রুত Serializable
। এর অন্যতম কারণ হ'ল আমরা সিরিয়ালাইজেশন প্রক্রিয়াটি অনুমান করার জন্য প্রতিবিম্বটি ব্যবহার করার পরিবর্তে সুস্পষ্ট হয়ে যাচ্ছি। এটিও এই কারণে দাঁড়ায় যে এই উদ্দেশ্যে কোডটি ভারীভাবে অনুকূলিত করা হয়েছে।
নীচের উদাহরণটি দেখুন (পার্সেবল):
// MyObjects Parcelable class
import java.util.ArrayList;
import android.os.Parcel;
import android.os.Parcelable;
public class MyObjects implements Parcelable {
private int age;
private String name;
private ArrayList<String> address;
public MyObjects(String name, int age, ArrayList<String> address) {
this.name = name;
this.age = age;
this.address = address;
}
public MyObjects(Parcel source) {
age = source.readInt();
name = source.readString();
address = source.createStringArrayList();
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(age);
dest.writeString(name);
dest.writeStringList(address);
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
public ArrayList<String> getAddress() {
if (!(address == null))
return address;
else
return new ArrayList<String>();
}
public static final Creator<MyObjects> CREATOR = new Creator<MyObjects>() {
@Override
public MyObjects[] newArray(int size) {
return new MyObjects[size];
}
@Override
public MyObjects createFromParcel(Parcel source) {
return new MyObjects(source);
}
};
}
// MyObjects instance
MyObjects mObjects = new MyObjects("name", "age", "Address array here");
// Passing MyOjects instance
Intent mIntent = new Intent(FromActivity.this, ToActivity.class);
mIntent.putExtra("UniqueKey", mObjects);
startActivity(mIntent);
// Getting MyObjects instance
Intent mIntent = getIntent();
MyObjects workorder = (MyObjects) mIntent.getParcelableExtra("UniqueKey");
আপনি ArrayList
নীচে পার্সলেবল অবজেক্টগুলি পাস করতে পারেন :
// Array of MyObjects
ArrayList<MyObjects> mUsers;
// Passing MyOjects instance
Intent mIntent = new Intent(FromActivity.this, ToActivity.class);
mIntent.putParcelableArrayListExtra("UniqueKey", mUsers);
startActivity(mIntent);
// Getting MyObjects instance
Intent mIntent = getIntent();
ArrayList<MyObjects> mUsers = mIntent.getParcelableArrayList("UniqueKey");
উপসংহার
Parcelable
Serializable
ইন্টারফেস চেয়ে দ্রুতParcelable
ইন্টারফেসের তুলনায় Serializable
ইন্টারফেস প্রয়োগ করতে আরও সময় লাগেSerializable
ইন্টারফেস কার্যকর করা সহজ Serializable
ইন্টারফেস অনেকগুলি অস্থায়ী বস্তু তৈরি করে এবং বেশ কিছুটা আবর্জনা সংগ্রহের কারণ হয়Parcelable
অ্যারে অ্যানড্রয়েড ইনটেন্ট মাধ্যমে পাস করা যেতে পারেসিরিয়ালাইজেবল একটি মানক জাভা ইন্টারফেস। আপনি কেবল ইন্টারফেস প্রয়োগ করে একটি শ্রেণি সিরিয়ালাইজযোগ্য হিসাবে চিহ্নিত করুন এবং জাভা কিছু নির্দিষ্ট পরিস্থিতিতে এটি স্বয়ংক্রিয়ভাবে সিরিয়ালাইজ হবে।
পার্সেবল একটি অ্যান্ড্রয়েড নির্দিষ্ট ইন্টারফেস যেখানে আপনি নিজেই সিরিয়ালাইজেশন প্রয়োগ করেন। এটি সিরিয়ালাইজযোগ্য, এবং ডিফল্ট জাভা সিরিয়ালাইজেশন স্কিমটি নিয়ে কিছু সমস্যা পেতে আরও কার্যকর করার জন্য তৈরি করা হয়েছিল।
আমি বিশ্বাস করি যে বাইন্ডার এবং এআইডিএল পার্সেবল বস্তুগুলির সাথে কাজ করে।
তবে আপনি ইন্টেন্টে সিরিয়ালাইজযোগ্য অবজেক্ট ব্যবহার করতে পারেন।
পার্সেবল বনাম সিরিয়ালাইজেবল আমি এই দুটি উল্লেখ করি।
জাভা এবং কোটলিনের জন্য
1) জাভা
সিরিয়ালাইজযোগ্য, সরলতা
সিরিয়ালাইজযোগ্য কী?
সিরিয়ালাইজেবল একটি মানক জাভা ইন্টারফেস। এটি অ্যান্ড্রয়েড এসডিকে-র অংশ নয়। এর সরলতা হ'ল এর সৌন্দর্য। কেবলমাত্র এই ইন্টারফেসটি প্রয়োগ করে আপনার পোজো এক ক্রিয়াকলাপ থেকে অন্য কার্যকলাপে ঝাঁপিয়ে পড়তে প্রস্তুত।
public class TestModel implements Serializable {
String name;
public TestModel(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
সিরিয়ালাইজেবলের সৌন্দর্য হ'ল আপনাকে কেবল একটি শ্রেণি এবং তার শিশুদের জন্য সিরিয়ালাইজযোগ্য ইন্টারফেস প্রয়োগ করতে হবে। এটি একটি মার্কার ইন্টারফেস, যার অর্থ বাস্তবায়নের কোনও পদ্ধতি নেই, জাভা এটিকে দক্ষতার সাথে সিরিয়ালকরণের জন্য যথাসাধ্য চেষ্টা করবে।
এই পদ্ধতির সাথে সমস্যাটি হ'ল প্রতিবিম্বটি ব্যবহৃত হয় এবং এটি একটি ধীর প্রক্রিয়া। এই প্রক্রিয়াটি প্রচুর অস্থায়ী বস্তু তৈরি করে এবং বেশ কিছুটা আবর্জনা সংগ্রহের কারণ হয়।
পার্সেবল, গতি
পার্সেবল কী?
পার্সেবল অন্য ইন্টারফেস। এর প্রতিদ্বন্দ্বী হওয়া সত্ত্বেও (ভুলে গেলে সিরিয়ালাইজযোগ্য), এটি অ্যান্ড্রয়েড এসডিকে-র একটি অংশ। এখন, পার্সেবলকে বিশেষভাবে এমনভাবে নকশা করা হয়েছিল যাতে এটি ব্যবহার করার সময় কোনও প্রতিচ্ছবি হয় না। কারণ সিরিয়ালাইজেশন প্রক্রিয়াটির জন্য আমরা সত্যই স্পষ্ট হয়েছি।
public class TestModel implements Parcelable {
String name;
public TestModel(String name, String id) {
this.name = name;
}
protected TestModel(Parcel in) {
this.name = in.readString();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.name);
}
public static final Parcelable.Creator<TestModel> CREATOR = new Parcelable.Creator<TestModel>() {
@Override
public TestModel createFromParcel(Parcel source) {
return new TestModel(source);
}
@Override
public TestModel[] newArray(int size) {
return new TestModel[size];
}
};
}
এখন, বিজয়ী হয়
ফিলিপ ব্রেকোল্টের দ্বারা পরিচালিত পরীক্ষার ফলাফলগুলি দেখায় যে পার্সেবল সিরিয়ালাইজযোগ্যের চেয়ে 10xেরও বেশি দ্রুত। গুগলের আরও কিছু প্রকৌশলী পাশাপাশি এই বিবৃতিটির পেছনে দাঁড়িয়েছেন।
তাদের মতে, ডিফল্ট সিরিয়ালাইজযোগ্য পদ্ধতি পার্সেবলের চেয়ে ধীর than এবং এখানে আমাদের দুই দলের মধ্যে একটি চুক্তি আছে! কিন্তু, এই দুটি তুলনা করা মোটেও অন্যায়! কারণ পার্সেবলের সাথে আমরা আসলে কাস্টম কোড লিখছি। কোডটি বিশেষত একটি পজোর জন্য তৈরি হয়েছিল। সুতরাং, কোনও আবর্জনা তৈরি করা হয় না এবং ফলাফল আরও ভাল হয়। তবে ডিফল্ট সিরিয়ালাইজযোগ্য পদ্ধতির সাথে আমরা জাভার স্বয়ংক্রিয় সিরিয়ালাইজেশন প্রক্রিয়ার উপর নির্ভর করি। প্রক্রিয়াটি দৃশ্যত একেবারেই কাস্টম নয় এবং প্রচুর আবর্জনা তৈরি করে! সুতরাং, খারাপ ফলাফল।
বন্ধ করুন !!!!, সিদ্ধান্ত নেওয়ার আগে
এখন, আরও একটি উপায় আছে । সিরিয়ালাইজেবলের পিছনে সম্পূর্ণ স্বয়ংক্রিয় প্রক্রিয়াটি কাস্টম কোড দ্বারা প্রতিস্থাপন করা যেতে পারে যা রাইটওবজেক্ট () এবং রিডঅবজেক্ট () পদ্ধতিগুলি ব্যবহার করে। এই পদ্ধতিগুলি নির্দিষ্ট। আমরা যদি কাস্টম সিরিয়ালাইজেশন আচরণের সাথে মিলিয়ে সিরিয়ালাইজেবল পদ্ধতির উপর নির্ভর করতে চাই, তবে আমাদের অবশ্যই এই দুটি পদ্ধতি নীচের মত একই হস্তাক্ষর সহ অন্তর্ভুক্ত করতে হবে:
private void writeObject(java.io.ObjectOutputStream out)
throws IOException;
private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException;
private void readObjectNoData()
throws ObjectStreamException;
এবং এখন পার্সেবল এবং কাস্টম সিরিয়ালাইজেবলের মধ্যে একটি তুলনা ন্যায্য বলে মনে হচ্ছে! ফলাফল অবাক হতে পারে! লেখার জন্য কাস্টম সিরিয়ালাইজড অ্যাপ্রোচিং 3x এর চেয়ে বেশি দ্রুত এবং পার্সেবলের চেয়ে পড়ার জন্য 1.6x দ্রুত।
সম্পাদিত: -----
2) কোটলিন্স সিরিয়ালাইজেশন
কোটলিনেক্স সিরিয়ালাইজেশন লাইব্রেরি
For Kotlin serialization need to add below dependency and plugin
implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.9.1"
apply plugin: 'kotlinx-serialization'
আপনার build.gradle
ফাইল
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlinx-serialization'
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.example.smile.kotlinxretrosample"
minSdkVersion 16
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.9.1"
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.android.support:design:28.0.0'
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation 'com.squareup.okhttp3:okhttp:3.12.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
সিরিয়ালাইজিং বেশ সহজেই করা হয়, @Serializable
নীচের হিসাবে টীকা সহ আপনার উদ্দেশ্য বর্গটি বিকাশ করতে হবে
import kotlinx.serialization.Serializable
@Serializable
class Field {
var count: Int = 0
var name: String = ""
}
লক্ষ করার জন্য আরও দুটি টীকাগুলি হ'ল transient
এবং optional
। ক্ষণস্থায়ী ব্যবহারের মাধ্যমে সিরিয়ালাইজারটি সেই ক্ষেত্রটিকে উপেক্ষা করবে এবং fieldচ্ছিক ব্যবহারের ফলে ক্ষেত্রটি অনুপস্থিত থাকলে সিরিয়ালাইজারটি ভেঙে ফেলতে দেবে, তবে একই সময়ে একটি ডিফল্ট মান সরবরাহ করা প্রয়োজন।
@Optional
var isOptional: Boolean = false
@Transient
var isTransient: Boolean = false
দ্রষ্টব্য : এটি পাশাপাশি ডেটা ক্লাসগুলির সাথেও কাজ করতে পারে।
এখন বাস্তবে এটি কার্যকরভাবে ব্যবহার করতে আসুন কীভাবে কোনও জেএসওএনকে বস্তু এবং পিছনে রূপান্তর করতে হয় তার একটি উদাহরণ নিই
fun toObject(stringValue: String): Field {
return JSON.parse(Field.serializer(), stringValue)
}
fun toJson(field: Field): String {
//Notice we call a serializer method which is autogenerated from our class
//once we have added the annotation to it
return JSON.stringify(Field.serializer(), field)
}
জন্য আরো
Serialization
, একবার দেখুন।
আপনি যদি একজন ভাল নাগরিক হতে চান, পার্সেবলকে বাস্তবায়নের জন্য অতিরিক্ত সময় নিন কারণ এটি 10 গুণ দ্রুত সম্পাদন করবে এবং কম সংস্থান ব্যবহার করবে।
তবে বেশিরভাগ ক্ষেত্রে সিরিয়ালিজেবলের স্লোতা লক্ষণীয় হবে না। এটি ব্যবহারে নির্দ্বিধায় কিন্তু মনে রাখবেন যে সিরিয়ালাইজেশন একটি ব্যয়বহুল অপারেশন তাই এটি সর্বনিম্ন রাখুন।
আপনি যদি হাজার হাজার সিরিয়ালাইজড অবজেক্টের সাথে একটি তালিকা পাস করার চেষ্টা করছেন তবে এটি সম্ভব যে পুরো প্রক্রিয়াটি এক সেকেন্ডেরও বেশি সময় নেয়। এটি প্রতিকৃতি থেকে ল্যানস্কেপ থেকে খুব স্বাচ্ছন্দ্য বোধ করতে বা রূপান্তর করতে পারে।
এই বিষয়টির উত্স: http://www.developerphil.com/parcelable-vs-serializable/
পার্সেবলে, বিকাশকারীরা মার্শালিং এবং আনমারশিলিংয়ের জন্য কাস্টম কোড লিখেন যাতে এটি সিরিয়ালাইজেশনের তুলনায় কম আবর্জনার সামগ্রী তৈরি করে। এই কাস্টম প্রয়োগের কারণে পার্সেবল ওভার সিরিয়ালাইজেশনের পারফরম্যান্স নাটকীয়ভাবে উন্নত হয়েছে (প্রায় দুই গুণ দ্রুত) improves
সিরিয়ালাইজেবল একটি চিহ্নিত ইন্টারফেস, যা বোঝায় যে ব্যবহারকারী তাদের প্রয়োজনীয়তা অনুযায়ী ডেটা মার্শাল করতে পারবেন না। সিরিয়ালাইজেশনে, জাভা ভার্চুয়াল মেশিনে (জেভিএম) জাভা প্রতিবিম্ব এপিআই ব্যবহার করে মার্শালিং অপারেশন করা হয়। এটি জাভা অবজেক্টের সদস্য এবং আচরণ চিহ্নিত করতে সহায়তা করে, তবে প্রচুর আবর্জনা তৈরির বস্তু তৈরি করে। এ কারণে পার্সেবলের তুলনায় সিরিয়ালাইজেশন প্রক্রিয়াটি ধীর গতিতে।
সম্পাদনা: মার্শালিং এবং আনমারশেলিংয়ের অর্থ কী?
কয়েকটি কথায়, "মার্শালিং" বলতে বাইট-স্ট্রিমের অভ্যন্তরে ডেটা বা অবজেক্টগুলিকে রূপান্তর করার প্রক্রিয়া বোঝায় এবং "আনমারশেলিং" বাইট-স্ট্রিম বেককে তাদের মূল ডেটা বা বস্তুতে রূপান্তর করার বিপরীত প্রক্রিয়া। রূপান্তরটি "সিরিয়ালাইজেশন" এর মাধ্যমে অর্জিত হয়।
আমি আসলে সিরিয়ালাইজেবলের পক্ষে একজন লোক হতে চলেছি। ডিভাইসগুলি বেশ কয়েক বছর আগের তুলনায় আরও ভাল এবং গেমের মধ্যে আরও সূক্ষ্ম পার্থক্য রয়েছে বলে গতির পার্থক্যটি এত বেশি কঠোর নয়। দেখুন আমার ব্লগ আরো তথ্যের জন্য ইস্যুতে পোস্ট।
পার্সেবলকে ডেটা স্থানান্তর করার জন্য প্রস্তাবিত পদ্ধতির প্রস্তাব দেওয়া হয়। তবে আপনি যদি এই রেপোতে প্রদর্শিত হিসাবে সিরিয়ালাইজযোগ্য সঠিকভাবে ব্যবহার করেন , আপনি দেখতে পাবেন যে সিরিয়ালীকরণযোগ্য কখনও কখনও আরও দ্রুত হয় তবে পার্সেবল ble বা কমপক্ষে সময় তুলনাযোগ্য।
একটি গড় অ্যান্ড্রয়েড ডিভাইসে সাধারণ জাভা সিরিয়ালাইজেশন (যদি ডান * হয়ে থাকে) লেখার জন্য পার্সেবলের চেয়ে প্রায় 3.6 গুণ বেশি এবং পড়ার জন্য প্রায় 1.6 গুণ দ্রুত। এছাড়াও এটি প্রমাণ করে যে জাভা সিরিয়ালাইজেশন (যদি সঠিকভাবে করা হয়) দ্রুত স্টোরেজ প্রক্রিয়া যা 10 টি ক্ষেত্রের সাথে 11000 অবজেক্টের তুলনামূলকভাবে বড় অবজেক্টের গ্রাফ সহ গ্রহণযোগ্য ফলাফল দেয়।
* সিডনোটটি হ'ল সাধারণত যে সবাই অন্ধভাবে বলে যে "পার্সেলেবল মশ দ্রুত" এটি ডিফল্ট স্বয়ংক্রিয় সিরিয়ালাইজেশনের সাথে তুলনা করে, যা ভিতরে অনেক প্রতিবিম্ব ব্যবহার করে। এটি অন্যায্য তুলনা, কারণ পার্সেবল স্ট্রিমে ডেটা লেখার ম্যানুয়াল (এবং খুব জটিল) ব্যবহার করে। সাধারণত যা উল্লেখ করা হয় না তা হ'ল ডক্স অনুসারে স্ট্যান্ডার্ড জাভা সিরিয়ালাইজেবল রাইটওবজেক্ট () এবং রিড-অবজেক্ট () পদ্ধতি ব্যবহার করে একটি ম্যানুয়াল পদ্ধতিতেও করা যেতে পারে। আরও তথ্যের জন্য জাভাডক্স দেখুন। এটি সেরা অভিনয়ের জন্য এটি করা উচিত।
কারণটি নেটিভ কোড। পার্সেবল কেবল আন্তঃসম্পর্কিত যোগাযোগের জন্য তৈরি করা হয়নি। এটি ইন্টারকোড যোগাযোগের জন্যও ব্যবহার করা যেতে পারে । আপনি সি ++ নেটিভ স্তর থেকে অবজেক্টগুলি প্রেরণ এবং রিসিভ করতে পারেন। এটাই.
আপনি কি চয়ন করা উচিত? দুজনেই ভাল কাজ করবে। তবে আমি মনে করি পার্সেবল আরও ভাল পছন্দ কারণ এটি গুগল দ্বারা প্রস্তাবিত এবং আপনি এই থ্রেড থেকে দেখতে পাচ্ছেন যে আরও বেশি প্রশংসিত।
@see http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html
@see http://developer.android.com/references/android/os/Parcelable.html
সচেতন থাকুন যে সিরিয়ালাইজযোগ্যটি একটি জাভা ইন্টারফেস, এবং পার্সেবল অ্যান্ড্রয়েড বিকাশের জন্য
মার্শালিং এবং আনমারশালিং সম্পর্কিত কিছু পারফরম্যান্স সমস্যা রয়েছে। পার্সেলেবল সিরিয়ালাইজেবলের চেয়ে দ্বিগুণ দ্রুত।
দয়া করে নীচের লিঙ্কটি দিয়ে যান:
http://www.3pillarglobal.com/insights/parcelable-vs-java-serialization-in-android-app-development
সিরিয়ালাইজেবল ইন্টারফেসটি পার্সলেবলের মতো একইভাবে ব্যবহার করা যেতে পারে, যার ফলে আরও বেশি পারফরম্যান্স হয় (বেশি নয়)। ম্যানুয়াল মার্শালিং এবং আনমারশেলিং প্রক্রিয়া পরিচালনা করতে কেবল সেই দুটি পদ্ধতি ওভাররাইট করুন:
private void writeObject(java.io.ObjectOutputStream out)
throws IOException
private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException
তবুও, আমার কাছে মনে হয় নেটিভ অ্যান্ড্রয়েড বিকাশ করার সময় অ্যান্ড্রয়েড এপিআই ব্যবহার করার উপায়।
দেখা :
আমি উত্তর দিতে দেরি করছি, তবে এটি অন্যদের সহায়তা করবে আশা করে পোস্ট করা।
নিরিখে গতি , Parcelable > Serializable
। তবে, কাস্টম সিরিয়ালাইজ ব্যতিক্রম। এটি পার্সেবলের পরিসীমা বা আরও বেশি দ্রুত।
তথ্যসূত্র: https://www.geeksforgeeks.org/customized-seialization-and-deserialization-in-java/
উদাহরণ:
কাস্টম ক্লাস সিরিয়াল করা হবে
class MySerialized implements Serializable {
String deviceAddress = "MyAndroid-04";
transient String token = "AABCDS"; // sensitive information which I do not want to serialize
private void writeObject(ObjectOutputStream oos) throws Exception {
oos.defaultWriteObject();
oos.writeObject("111111" + token); // Encrypted token to be serialized
}
private void readObject(ObjectInputStream ois) throws Exception {
ois.defaultReadObject();
token = ((String) ois.readObject()).subString(6); // Decrypting token
}
}
বাইন্ডারের সাথে সিরিয়ালযোগ্য হওয়ার চেয়ে পার্সেলেবল অনেক দ্রুত, কারণ সিরিয়ালাইজযোগ্য প্রতিবিম্বটি ব্যবহার করে এবং অনেকগুলি জিসির কারণ ঘটায়। পার্সেলেবল হ'ল অবজেক্টটি পাস করার জন্য অনুকূলিতকরণের জন্য ডিজাইন।
এখানে রেফারেন্স লিঙ্ক। http://www.developerphil.com/parcelable-vs-serializable/
আপনি অভিপ্রায়গুলিতে সিরিয়ালাইজযোগ্য অবজেক্টগুলি ব্যবহার করতে পারেন তবে একটি পার্সেলেবল অবজেক্টকে সিরিয়ালাইজ করার সময় এটি নোটসিরাইজেবল এক্সসেপ্টের মতো মারাত্মক ব্যতিক্রম দিতে পারে। পার্সেবলের সাথে সিরিয়ালযোগ্য ব্যবহার করার পরামর্শ দেওয়া হচ্ছে না কি? সুতরাং যে বস্তুটি আপনি বান্ডিল এবং অভিপ্রায়গুলির সাথে ব্যবহার করতে চান তার সাথে পার্সেবল প্রসারিত করা ভাল better এই পার্সেবল অ্যান্ড্রয়েড নির্দিষ্ট কারণ এটির কোনও পার্শ্ব প্রতিক্রিয়া নেই। :)
Serializable
সিরিয়ালাইজযোগ্য একটি চিহ্নিতযোগ্য ইন্টারফেস বা আমরা খালি ইন্টারফেস হিসাবে কল করতে পারি। এটির কোনও প্রাক-বাস্তবায়িত পদ্ধতি নেই। সিরিয়ালাইজেবল কোনও বস্তুকে বাইট স্ট্রিমে রূপান্তর করতে চলেছে। সুতরাং ব্যবহারকারী একটি ক্রিয়াকলাপের মধ্যে ডেটা অন্য ক্রিয়াকলাপের মধ্যে পাস করতে পারে। সিরিয়ালাইজেবলের প্রধান সুবিধা হ'ল ডেটা তৈরি করা এবং পাস করা খুব সহজ তবে পার্সেবলের সাথে তুলনা করা একটি ধীর প্রক্রিয়া।
Parcelable
পার্সেল সক্ষম সিরিয়ালের চেয়ে দ্রুত। পার্সেল সক্ষম বস্তুটিকে বাইট স্ট্রীমে রূপান্তর করতে এবং দুটি ক্রিয়াকলাপের মধ্যে ডেটা পাস করতে চলেছে। পার্সেল সক্ষম কোড রচনা সিরিয়ালের সাথে তুলনা করার চেয়ে সামান্য জটিল। দুটি ক্রিয়াকলাপের মধ্যে ডেটা পাস করার সময় এটি আরও অস্থায়ী বস্তু তৈরি করে না।