অ্যান্ড্রয়েড: পার্সেবল এবং সিরিয়ালাইজেবলের মধ্যে পার্থক্য?


313

অ্যান্ড্রয়েড কেন বস্তুগুলিকে সিরিয়াল করার জন্য 2 টি ইন্টারফেস সরবরাহ করে? সিরিয়ালাইজযোগ্য অবজেক্টগুলি কী অ্যান্ড্রয়েড Binderএবং এইডআইএল ফাইলগুলির সাথে বিরতি দেয়?

উত্তর:


444

অ্যান্ড্রয়েডে আমরা কেবল ক্রিয়াকলাপগুলিতে বস্তুগুলি পাস করতে পারি না। এটি করার জন্য অবজেক্টগুলিকে হয় বাস্তবায়ন 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");

উপসংহার

  1. ParcelableSerializableইন্টারফেস চেয়ে দ্রুত
  2. Parcelableইন্টারফেসের তুলনায় Serializableইন্টারফেস প্রয়োগ করতে আরও সময় লাগে
  3. Serializable ইন্টারফেস কার্যকর করা সহজ
  4. Serializable ইন্টারফেস অনেকগুলি অস্থায়ী বস্তু তৈরি করে এবং বেশ কিছুটা আবর্জনা সংগ্রহের কারণ হয়
  5. Parcelable অ্যারে অ্যানড্রয়েড ইনটেন্ট মাধ্যমে পাস করা যেতে পারে

2
@ সুজিথ আপনি প্রতিবিম্ব বলতে কী বোঝাতে চেয়েছেন ? প্রতিবিম্ব কি ?
এএনভি 14

11
@ অভাবনভুতুকুরি প্রতিচ্ছবিটি অবজেক্ট.জেটক্লাস () এবং এর মাধ্যমে রান-টাইমে অবজেক্টস, ক্ষেত্র এবং পদ্ধতিগুলি পরিদর্শন করার শব্দ।
ফল্ট এক্সসেপশন

2
সিরিয়ালাইজেবলগুলি অবিরাম ডেটা বজায় রাখার জন্য আরও ভাল, অন্যদিকে পার্সেলেবল অবজেক্টগুলি একেবারেই স্থির করা উচিত নয়। এটি একটি খুব খারাপ অভ্যাস
TheAnimatrix

2
@ সুজিথ যেমন একাধিক ব্যক্তি বলেছেন, পার্সেলেবল অবজেক্টগুলি স্থির করা যায় না (বিশ্বাসযোগ্যভাবে) তবে সিরিয়ালাইজযোগ্য জিনিসগুলি (সীমাবদ্ধতার মধ্যে) থাকতে পারে। যেহেতু আপনার উত্তরটি সর্বাধিক স্কোরিং এবং সমস্ত গুরুত্বপূর্ণ পার্থক্য coveringাকা দেওয়ার আভাস দেয় তাই আপনার সম্ভবত সেই পয়েন্টটি উল্লেখ করা উচিত।
LarsH

4
পার্সেবলের প্রয়োগ এখন সিরিয়ালাইজেবলের মতো দ্রুত, কেবল অ্যান্ড্রয়েড স্টুডিওতে পার্সেবল প্রয়োগকারী যে কোনও শ্রেণীর উপর ALT + INSERT টিপুন এবং আইডিই এটি করবে।
আলী নেম

183

সিরিয়ালাইজেবল একটি মানক জাভা ইন্টারফেস। আপনি কেবল ইন্টারফেস প্রয়োগ করে একটি শ্রেণি সিরিয়ালাইজযোগ্য হিসাবে চিহ্নিত করুন এবং জাভা কিছু নির্দিষ্ট পরিস্থিতিতে এটি স্বয়ংক্রিয়ভাবে সিরিয়ালাইজ হবে।

পার্সেবল একটি অ্যান্ড্রয়েড নির্দিষ্ট ইন্টারফেস যেখানে আপনি নিজেই সিরিয়ালাইজেশন প্রয়োগ করেন। এটি সিরিয়ালাইজযোগ্য, এবং ডিফল্ট জাভা সিরিয়ালাইজেশন স্কিমটি নিয়ে কিছু সমস্যা পেতে আরও কার্যকর করার জন্য তৈরি করা হয়েছিল।

আমি বিশ্বাস করি যে বাইন্ডার এবং এআইডিএল পার্সেবল বস্তুগুলির সাথে কাজ করে।

তবে আপনি ইন্টেন্টে সিরিয়ালাইজযোগ্য অবজেক্ট ব্যবহার করতে পারেন।


1
আমি কীভাবে পার্সেবল অবজেক্টটি সিরিয়ালাইজ করব? আমি কীভাবে এটি অবিরাম করতে পারি?
হেডিস

@ হ্যাডগুলি অবজেক্টগুলির সামগ্রীতে স্টেটস পান এবং এটি কোনও ফাইল বা এসকিউএলাইট ডাটাবেসে সংরক্ষণ করুন। অ্যান্ড্রয়েডের বিভিন্ন উপাদান বা সম্পূর্ণরূপে বিভিন্ন অ্যাপ্লিকেশনগুলির মধ্যে স্থানগুলি স্থানান্তরযোগ্য হয়ে ওঠার জন্য সিরিলেজিং কার্যকর is
জোনাথন

6
এটি একটি দুর্দান্ত ব্যাখ্যা। আমি এটিও লক্ষ্য করেছি: "পার্সেল কোনও সাধারণ-উদ্দেশ্য সিরিয়ালাইজেশন প্রক্রিয়া নয় This এই শ্রেণিটি (এবং পার্সেলে স্বেচ্ছাসেবী বস্তু রাখার জন্য সংশ্লিষ্ট পার্সেলেবল এপিআই) একটি উচ্চ-পারফরম্যান্স আইপিসি পরিবহন হিসাবে নকশা করা হয়েছে। যেমনটি, এটি উপযুক্ত নয় স্থায়ী স্টোরেজে কোনও পার্সেল ডেটা রাখুন: পার্সেলের যে কোনও ডেটার অন্তর্নিহিত প্রয়োগের পরিবর্তনগুলি পুরানো ডেটা অপঠনযোগ্য রেন্ডার করতে পারে। " বিকাশকারী.অ্যান্ড্রয়েড.
com

পছন্দ করেছেন আমরা পার্সেলের মধ্যে কি ধরণের জিনিস রাখতে পারি?
হাসনাইন_হমাদ

কীভাবে বস্তুর পরিবর্তে জসন স্ট্রিংয়ে গসনের সাথে রূপান্তর করা যায়?
এফইও

57

পার্সেবল বনাম সিরিয়ালাইজেবল আমি এই দুটি উল্লেখ করি।

জাভা এবং কোটলিনের জন্য

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, একবার দেখুন।
ফারহানা

@ ফারহানা এটি খুব অন্তর্দৃষ্টিপূর্ণ ছিল আমি সত্যিই কাজে কোটলিনে যেতে চাই তবে আমার প্রস্তাবগুলি নিয়মিত পরিচালকদের দ্বারা প্রত্যাখ্যান করা হচ্ছে। আমি ভাবছি যে আমি সিরিয়ালাইজেবল (কাস্টম পদ্ধতি সহ) এর জন্য বেঞ্চমার্ক পেতে পারি যা আপনি বলছেন পার্সেবলের চেয়ে 1.6 গুণ বেশি দ্রুত।
অভিনব কুলশ্রেষ্ঠ

39

আপনি যদি একজন ভাল নাগরিক হতে চান, পার্সেবলকে বাস্তবায়নের জন্য অতিরিক্ত সময় নিন কারণ এটি 10 ​​গুণ দ্রুত সম্পাদন করবে এবং কম সংস্থান ব্যবহার করবে।

তবে বেশিরভাগ ক্ষেত্রে সিরিয়ালিজেবলের স্লোতা লক্ষণীয় হবে না। এটি ব্যবহারে নির্দ্বিধায় কিন্তু মনে রাখবেন যে সিরিয়ালাইজেশন একটি ব্যয়বহুল অপারেশন তাই এটি সর্বনিম্ন রাখুন।

আপনি যদি হাজার হাজার সিরিয়ালাইজড অবজেক্টের সাথে একটি তালিকা পাস করার চেষ্টা করছেন তবে এটি সম্ভব যে পুরো প্রক্রিয়াটি এক সেকেন্ডেরও বেশি সময় নেয়। এটি প্রতিকৃতি থেকে ল্যানস্কেপ থেকে খুব স্বাচ্ছন্দ্য বোধ করতে বা রূপান্তর করতে পারে।

এই বিষয়টির উত্স: http://www.developerphil.com/parcelable-vs-serializable/


32

পার্সেবলে, বিকাশকারীরা মার্শালিং এবং আনমারশিলিংয়ের জন্য কাস্টম কোড লিখেন যাতে এটি সিরিয়ালাইজেশনের তুলনায় কম আবর্জনার সামগ্রী তৈরি করে। এই কাস্টম প্রয়োগের কারণে পার্সেবল ওভার সিরিয়ালাইজেশনের পারফরম্যান্স নাটকীয়ভাবে উন্নত হয়েছে (প্রায় দুই গুণ দ্রুত) improves

সিরিয়ালাইজেবল একটি চিহ্নিত ইন্টারফেস, যা বোঝায় যে ব্যবহারকারী তাদের প্রয়োজনীয়তা অনুযায়ী ডেটা মার্শাল করতে পারবেন না। সিরিয়ালাইজেশনে, জাভা ভার্চুয়াল মেশিনে (জেভিএম) জাভা প্রতিবিম্ব এপিআই ব্যবহার করে মার্শালিং অপারেশন করা হয়। এটি জাভা অবজেক্টের সদস্য এবং আচরণ চিহ্নিত করতে সহায়তা করে, তবে প্রচুর আবর্জনা তৈরির বস্তু তৈরি করে। এ কারণে পার্সেবলের তুলনায় সিরিয়ালাইজেশন প্রক্রিয়াটি ধীর গতিতে।

সম্পাদনা: মার্শালিং এবং আনমারশেলিংয়ের অর্থ কী?

কয়েকটি কথায়, "মার্শালিং" বলতে বাইট-স্ট্রিমের অভ্যন্তরে ডেটা বা অবজেক্টগুলিকে রূপান্তর করার প্রক্রিয়া বোঝায় এবং "আনমারশেলিং" বাইট-স্ট্রিম বেককে তাদের মূল ডেটা বা বস্তুতে রূপান্তর করার বিপরীত প্রক্রিয়া। রূপান্তরটি "সিরিয়ালাইজেশন" এর মাধ্যমে অর্জিত হয়।

http://www.jguru.com/faq/view.jsp?EID=560072


ভার্জোজ উদাহরণ না দিয়েও বেশ ভাল ব্যাখ্যা। সংশোধন করার জন্য আমার যা প্রয়োজন ছিল।
Sud007

20

আমি আসলে সিরিয়ালাইজেবলের পক্ষে একজন লোক হতে চলেছি। ডিভাইসগুলি বেশ কয়েক বছর আগের তুলনায় আরও ভাল এবং গেমের মধ্যে আরও সূক্ষ্ম পার্থক্য রয়েছে বলে গতির পার্থক্যটি এত বেশি কঠোর নয়। দেখুন আমার ব্লগ আরো তথ্যের জন্য ইস্যুতে পোস্ট।


1
ভাগ করার জন্য আপনাকে ধন্যবাদ। সিরিয়ালাইজেবল বাস্তবায়নের পক্ষে এর কম জটিল এবং সেই বিরল এবং হাইপার অপ্টিমাইজেশনের ক্ষেত্রে বাণিজ্য বন্ধের সিদ্ধান্ত নেওয়া দরকার।
অঙ্কন-জেরোব

2
বিকল্প দৃষ্টিভঙ্গি, বিশেষত যখন পরীক্ষা-নিরীক্ষা এবং ফলাফলগুলির সাহায্যপ্রাপ্ত তখন খুব সহায়ক is আমাকে প্রচুর বিদ্যমান পার্সেবল ভিত্তিক উত্স কোডের সাথে কাজ করতে হবে, এবং এটির কিছুটা এখনই সংশোধন করতে পারি যে আমি আপনার ব্লগ পোস্টটি পড়েছি।
লেস

14

পার্সেবল অ্যান্ড্রয়েড বিকাশের একটি স্ট্যান্ডার্ড। তবে গতির কারণে নয়

পার্সেবলকে ডেটা স্থানান্তর করার জন্য প্রস্তাবিত পদ্ধতির প্রস্তাব দেওয়া হয়। তবে আপনি যদি এই রেপোতে প্রদর্শিত হিসাবে সিরিয়ালাইজযোগ্য সঠিকভাবে ব্যবহার করেন , আপনি দেখতে পাবেন যে সিরিয়ালীকরণযোগ্য কখনও কখনও আরও দ্রুত হয় তবে পার্সেবল ble বা কমপক্ষে সময় তুলনাযোগ্য।

পার্সেবল কি দ্রুত সিরিয়ালাইজযোগ্য?

একটি গড় অ্যান্ড্রয়েড ডিভাইসে সাধারণ জাভা সিরিয়ালাইজেশন (যদি ডান * হয়ে থাকে) লেখার জন্য পার্সেবলের চেয়ে প্রায় 3.6 গুণ বেশি এবং পড়ার জন্য প্রায় 1.6 গুণ দ্রুত। এছাড়াও এটি প্রমাণ করে যে জাভা সিরিয়ালাইজেশন (যদি সঠিকভাবে করা হয়) দ্রুত স্টোরেজ প্রক্রিয়া যা 10 টি ক্ষেত্রের সাথে 11000 অবজেক্টের তুলনামূলকভাবে বড় অবজেক্টের গ্রাফ সহ গ্রহণযোগ্য ফলাফল দেয়।

* সিডনোটটি হ'ল সাধারণত যে সবাই অন্ধভাবে বলে যে "পার্সেলেবল মশ দ্রুত" এটি ডিফল্ট স্বয়ংক্রিয় সিরিয়ালাইজেশনের সাথে তুলনা করে, যা ভিতরে অনেক প্রতিবিম্ব ব্যবহার করে। এটি অন্যায্য তুলনা, কারণ পার্সেবল স্ট্রিমে ডেটা লেখার ম্যানুয়াল (এবং খুব জটিল) ব্যবহার করে। সাধারণত যা উল্লেখ করা হয় না তা হ'ল ডক্স অনুসারে স্ট্যান্ডার্ড জাভা সিরিয়ালাইজেবল রাইটওবজেক্ট () এবং রিড-অবজেক্ট () পদ্ধতি ব্যবহার করে একটি ম্যানুয়াল পদ্ধতিতেও করা যেতে পারে। আরও তথ্যের জন্য জাভাডক্স দেখুন। এটি সেরা অভিনয়ের জন্য এটি করা উচিত।

সুতরাং, যদি সিরিয়ালাইজযোগ্য দ্রুত এবং কার্যকর করা সহজ হয় তবে অ্যান্ড্রয়েড কেন পার্সেবলযোগ্য?

কারণটি নেটিভ কোড। পার্সেবল কেবল আন্তঃসম্পর্কিত যোগাযোগের জন্য তৈরি করা হয়নি। এটি ইন্টারকোড যোগাযোগের জন্যও ব্যবহার করা যেতে পারে । আপনি সি ++ নেটিভ স্তর থেকে অবজেক্টগুলি প্রেরণ এবং রিসিভ করতে পারেন। এটাই.

আপনি কি চয়ন করা উচিত? দুজনেই ভাল কাজ করবে। তবে আমি মনে করি পার্সেবল আরও ভাল পছন্দ কারণ এটি গুগল দ্বারা প্রস্তাবিত এবং আপনি এই থ্রেড থেকে দেখতে পাচ্ছেন যে আরও বেশি প্রশংসিত।


আপনি আপনার উত্স সাইট করতে পারেন? আমি সত্যিই কৃতজ্ঞ হবে। ধন্যবাদ !!
আর্চি জি কুইনস

2
এই উত্তরটি আমি অভিজ্ঞ বিকাশকারীদের কাছ থেকে পেয়েছি যারা এওএসপি সম্পর্কিত প্রকল্প টুইটার . com/bwdude এ কাজ করেন । তিনি বলেছিলেন যে এসডিকে স্তরটির সাথে যোগাযোগের জন্য নেটিভ সি ++ কোড পার্সেবলের নিজস্ব প্রয়োগ ব্যবহার করে। আমি অনুমান করি যে তিনি এই শ্রেণীর সম্পর্কে কথা বলেন android.googlesource.com/platform/frameworks/native/+/… আমি জানি যে এটি সর্বোত্তম ব্যাখ্যা নয়, তবে আমার কাছে এখনই সেরা। যদি আপনি অন্য কিছু খুঁজে পান তবে অবশ্যই এটি পোস্ট করুন এখানে =))
মাকসিম তুরাইভ

আশা করি আমি আপনাকে একাধিকবার উত্সাহ দিতে পারতাম। আমি দুর্দান্ত অ্যান্ড্রয়েড এবং জাভা বিশেষজ্ঞদের এখানে সর্বাধিক উন্নত উত্তরের জন্য যেতে দেখেছি। ডকুমেন্টেশনের অভাব সিরিয়ালিজেবলের জন্য কোনও লাইমলাইটকে সত্যই বাধা দিয়েছে। এগুলির মতো একটি নির্দিষ্ট এপিআই প্রচারের প্রভাব Fe ধন্যবাদ!
পাল্প ফিকশন

11

1. সিরিয়ালাইজযোগ্য

@see http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html

ইন্টারফেস কি?

  • একটি স্ট্যান্ডার্ড জাভা ইন্টারফেস

দ্রুততা

  • পার্সেবলের চেয়ে ধীর

2. পার্সেবল

@see http://developer.android.com/references/android/os/Parcelable.html

ইন্টারফেস কি?

  • android.os ইন্টারফেস হয়
    • যার অর্থ অ্যান্ড্রয়েডে আরও ভাল পারফরম্যান্সের জন্য গুগল পার্সেবলের বিকাশ করেছে

দ্রুততা

  • দ্রুত (কারণ এটি অ্যান্ড্রয়েড বিকাশের জন্য ব্যবহারের জন্য অনুকূলিত হয়েছে)

> উপসংহারে

সচেতন থাকুন যে সিরিয়ালাইজযোগ্যটি একটি জাভা ইন্টারফেস, এবং পার্সেবল অ্যান্ড্রয়েড বিকাশের জন্য


আপনি তাদের ব্যবহার যুক্ত করা উচিত।
আনশুল তায়াগি

7

মার্শালিং এবং আনমারশালিং সম্পর্কিত কিছু পারফরম্যান্স সমস্যা রয়েছে। পার্সেলেবল সিরিয়ালাইজেবলের চেয়ে দ্বিগুণ দ্রুত।

দয়া করে নীচের লিঙ্কটি দিয়ে যান:

http://www.3pillarglobal.com/insights/parcelable-vs-java-serialization-in-android-app-development


হ্যাঁ আপনি ঠিকই আছেন geeksforandroidgeeks.com/android/…
বিবেক কুমার সমেল

4

আপনি অ্যান্ড্রয়েড স্টুডিওতে পার্সেবল প্লাগইন ব্যবহার করলে পার্সেবলের বাস্তবায়ন দ্রুততর হতে পারে। অ্যান্ড্রয়েড পার্সেবল কোড জেনারেটরের জন্য অনুসন্ধান করুন


3

সিরিয়ালাইজেবল ইন্টারফেসটি পার্সলেবলের মতো একইভাবে ব্যবহার করা যেতে পারে, যার ফলে আরও বেশি পারফরম্যান্স হয় (বেশি নয়)। ম্যানুয়াল মার্শালিং এবং আনমারশেলিং প্রক্রিয়া পরিচালনা করতে কেবল সেই দুটি পদ্ধতি ওভাররাইট করুন:

private void writeObject(java.io.ObjectOutputStream out)
    throws IOException
private void readObject(java.io.ObjectInputStream in)
    throws IOException, ClassNotFoundException

তবুও, আমার কাছে মনে হয় নেটিভ অ্যান্ড্রয়েড বিকাশ করার সময় অ্যান্ড্রয়েড এপিআই ব্যবহার করার উপায়।

দেখা :


2

আমি উত্তর দিতে দেরি করছি, তবে এটি অন্যদের সহায়তা করবে আশা করে পোস্ট করা।

নিরিখে গতি , 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
    }

}

1

বাইন্ডারের সাথে সিরিয়ালযোগ্য হওয়ার চেয়ে পার্সেলেবল অনেক দ্রুত, কারণ সিরিয়ালাইজযোগ্য প্রতিবিম্বটি ব্যবহার করে এবং অনেকগুলি জিসির কারণ ঘটায়। পার্সেলেবল হ'ল অবজেক্টটি পাস করার জন্য অনুকূলিতকরণের জন্য ডিজাইন।

এখানে রেফারেন্স লিঙ্ক। http://www.developerphil.com/parcelable-vs-serializable/


1

আপনি অভিপ্রায়গুলিতে সিরিয়ালাইজযোগ্য অবজেক্টগুলি ব্যবহার করতে পারেন তবে একটি পার্সেলেবল অবজেক্টকে সিরিয়ালাইজ করার সময় এটি নোটসিরাইজেবল এক্সসেপ্টের মতো মারাত্মক ব্যতিক্রম দিতে পারে। পার্সেবলের সাথে সিরিয়ালযোগ্য ব্যবহার করার পরামর্শ দেওয়া হচ্ছে না কি? সুতরাং যে বস্তুটি আপনি বান্ডিল এবং অভিপ্রায়গুলির সাথে ব্যবহার করতে চান তার সাথে পার্সেবল প্রসারিত করা ভাল better এই পার্সেবল অ্যান্ড্রয়েড নির্দিষ্ট কারণ এটির কোনও পার্শ্ব প্রতিক্রিয়া নেই। :)


0

Serializable

সিরিয়ালাইজযোগ্য একটি চিহ্নিতযোগ্য ইন্টারফেস বা আমরা খালি ইন্টারফেস হিসাবে কল করতে পারি। এটির কোনও প্রাক-বাস্তবায়িত পদ্ধতি নেই। সিরিয়ালাইজেবল কোনও বস্তুকে বাইট স্ট্রিমে রূপান্তর করতে চলেছে। সুতরাং ব্যবহারকারী একটি ক্রিয়াকলাপের মধ্যে ডেটা অন্য ক্রিয়াকলাপের মধ্যে পাস করতে পারে। সিরিয়ালাইজেবলের প্রধান সুবিধা হ'ল ডেটা তৈরি করা এবং পাস করা খুব সহজ তবে পার্সেবলের সাথে তুলনা করা একটি ধীর প্রক্রিয়া।

Parcelable

পার্সেল সক্ষম সিরিয়ালের চেয়ে দ্রুত। পার্সেল সক্ষম বস্তুটিকে বাইট স্ট্রীমে রূপান্তর করতে এবং দুটি ক্রিয়াকলাপের মধ্যে ডেটা পাস করতে চলেছে। পার্সেল সক্ষম কোড রচনা সিরিয়ালের সাথে তুলনা করার চেয়ে সামান্য জটিল। দুটি ক্রিয়াকলাপের মধ্যে ডেটা পাস করার সময় এটি আরও অস্থায়ী বস্তু তৈরি করে না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.