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


521

আমি জানি যে বেশ কয়েকটি বিতরণ কৌশলগুলির (যেমন আরপিসি) শর্তে, "মার্শালিং" শব্দটি ব্যবহৃত হয়েছে তবে কীভাবে এটি সিরিয়ালাইজেশন থেকে পৃথক হয় তা বুঝতে পারেন না। তারা উভয়ই কি বিটকে সিরিজের আকারে রূপান্তর করছে?

সম্পর্কিত:

সিরিয়ালাইজেশন কী?

অবজেক্ট মার্শালিং কী?

উত্তর:


404

Marshaling এবং ধারাবাহিকতাতে হয় ঢিলেঢালাভাবে দূরবর্তী অবস্থান থেকে প্রসিডিউর কল প্রেক্ষাপটে সমার্থক কিন্তু শব্দার্থগতভাবে অভিপ্রায় একটি বিষয় হিসাবে আলাদা।

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

রেফারেন্সের মাধ্যমে কোনও বস্তুর মার্শাল করাও সম্ভব, এই ক্ষেত্রে "তারের উপরের" ডেটা হ'ল মূল বস্তুর অবস্থান সম্পর্কিত তথ্য। যাইহোক, এই জাতীয় কোনও বস্তু সিরিয়ালাইজেশনকে মূল্য দেওয়ার ক্ষেত্রে এখনও অনুকূল হতে পারে।

@ বিলের উল্লেখ অনুসারে, অতিরিক্ত মেটাডেটা যেমন কোড বেস অবস্থান বা এমনকি অবজেক্ট ইমপ্লিমেশন কোডও থাকতে পারে।


3
এমন কোনও শব্দ রয়েছে যার অর্থ একই সাথে সিরিয়ালাইজেশন এবং ডিজাইরিয়ালাইজ করা হচ্ছে? এই পদ্ধতিগুলির সাথে ইন্টারফেসের জন্য একটি নাম প্রয়োজন।
রাফিয়ান

1
@ ইরফিয়ান, আপনার অর্থ কি এমন একটি ইন্টারফেস যার মাধ্যমে সিরিয়ালাইজেশন এবং ডিসরিয়ালাইজেশন হয় সেই বস্তুর দ্বারা প্রয়োগ করা হয়, বা প্রক্রিয়া পরিচালনার জন্য দায়ী কোনও বস্তু দ্বারা? আমি যে মূল শব্দগুলির পরামর্শ দেব তা হ'ল যথাক্রমে "সিরিয়ালাইজেবল" এবং "ফর্ম্যাটটার"; নেতৃস্থানীয় I, মূলধন পরিবর্তনগুলি, এবং আরও প্রয়োজনীয় হিসাবে সাজান।
জেফ্রি হ্যান্টিন

@ জেফ্রেহ্যান্টিন প্রক্রিয়া পরিচালনার জন্য দায়ী একটি বিষয় আমার অর্থ; আমি এখন ইরিশিয়েলাইজার ব্যবহার করছি, তবে এটি ঠিক অর্ধেক :)
রাফিয়ান

6
টেলিফোন যোগাযোগের ক্ষেত্রে @ ইরফিয়ান, আমরা এমন একটি উপাদানকে কল করি যা পছন্দসইতার উপর নির্ভর করে সাধারণত স্যার-দেজ বা স্যার-দেজ উচ্চারণ করা একটি "সার্ডিজ" বা "সার্ডস" সিরিয়ালিকৃত করে এবং ডিসায়ারাইজ করে। আমি মনে করি এটির নির্মাণে এটি "মডেম" (যেমন "মডুলেটর-ডিমোডুলেটর") এর অনুরূপ।
ডেভিডা

2
@ নাকি এটি শিল্প-ব্যাপী - আপনি যদি উচ্চ গতির এফপিজিএ ডেটাশিটগুলি দেখেন তবে তারা SERDES কার্যকারিতা উল্লেখ করবে, যদিও সেগুলি মোটামুটি আধুনিক, 1990 এর দশকে ফিরে আসছে। গুগল NGrams , 1980 সালের আগে আরও জনপ্রিয় হয়ে ওঠে দাড়ায় যদিও আমি থেকে একটি আইবিএম উপাত্তপত্র মধ্যে একটি দৃষ্টান্ত খুঁজে করেনি 1970
davidA

207

দু'জনেই একটি জিনিস অভিন্ন করে - এটি একটি অবজেক্টকে সিরিয়ালাইজ করা । সিরিয়ালাইজেশন বস্তু স্থানান্তর করতে বা তাদের সঞ্চয় করতে ব্যবহৃত হয়। কিন্তু:

  • সিরিয়ালাইজেশন: আপনি যখন কোনও অবজেক্টকে সিরিয়ালাইজ করেন, কেবলমাত্র সেই অবজেক্টের মধ্যে থাকা সদস্য ডেটা বাইট স্ট্রিমে লেখা হয়; কোডটি নয় যা আসলে বস্তুকে কার্যকর করে।
  • মার্শেলিং: টার্ম মার্শেলিং ব্যবহার করা হয় যখন আমরা প্রত্যন্ত বস্তুগুলিতে (আরএমআই) অবজেক্টটি পাস করার বিষয়ে কথা বলি । মার্শালিং অবজেক্টে সিরিয়ালযুক্ত হয় (সদস্যের ডেটা সিরিয়ালাইজড হয়) + কোডবেস সংযুক্ত থাকে।

সুতরাং সিরিয়ালাইজেশন মার্শেলিংয়ের অংশ।

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


45
এই প্রসঙ্গে কোডবেস এর অর্থ কী তা বোঝানোর জন্য +1
ওমর সালেম

2
সিরিয়ালাইজেশন ছাড়াই মার্শালিং ঘটে। সুইং invokeAndWaitএবং ফর্মস দেখুন Invoke, যা সিরিয়ালাইজেশন জড়িত না করে ইউআই থ্রেডে একটি সুসংগত কলকে মার্শাল করে।
জেফ্রি হ্যান্টিন

2
"কোডটি নয় যা বস্তুটি বাস্তবে কার্যকর করে": এটি কি শ্রেণি পদ্ধতিগুলি বোঝায়? বা এর অর্থ কী? আপনি দয়া করে ব্যাখ্যা করতে পারেন।
বিশাল আনন্দ

2
মানে কি the implementation of this object? আপনি একটি নির্দিষ্ট উদাহরণ দিতে পারেন Serializationএবং Marshalling?
সিমিন জি

Marshalling ধারাবাহিকতাতে ছাড়া যেমন যখন একটি ফাংশন কল স্থানান্তর থ্রেডিং মডেলের মধ্যে প্রবাহিত (উদাহরণস্বরূপ, একটি ভাগ থ্রেড পুল এবং একটি একক পিন করা-থ্রেড গ্রন্থাগার মধ্যে) একটা একক প্রক্রিয়া মধ্যে নিয়ন্ত্রণ কিছু প্রেক্ষিতে ঘটে। এ কারণেই আমি বলি যে তারা আরপিসির প্রসঙ্গে looseিলে .ালা সমার্থক ।
জেফ্রি হ্যান্টিন

94

থেকে marshalling (কম্পিউটার বিজ্ঞান) উইকিপিডিয়া নিবন্ধ:

পাইথন স্ট্যান্ডার্ড লাইব্রেরি 1-এ "মার্শাল" শব্দটি "সিরিয়ালাইজ" এর সমার্থক হিসাবে বিবেচিত , তবে শব্দটি জাভা-সম্পর্কিত আরএফসি 2713-এ সমার্থক নয়:

"মার্শাল" বলতে কোনও বস্তুর অর্থ তার রাজ্য এবং কোডবেস (গুলি) এমনভাবে রেকর্ড করা হয় যে যখন মার্শালযুক্ত বস্তুটি "নিরবচ্ছিন্ন" হয়, তখন মূল বস্তুর একটি অনুলিপি পাওয়া যায়, সম্ভবত বস্তুর শ্রেণিবদ্ধ সংজ্ঞা স্বয়ংক্রিয়ভাবে লোড করে by সিরিয়ালাইজযোগ্য বা দূরবর্তী যে কোনও অবজেক্টকে আপনি মার্শাল করতে পারেন। মার্শেলিং সিরিয়ালাইজের মতো, মার্শেলিং ছাড়াও কোডবেস রেকর্ড করা। মার্শেলিং সিরিয়ালাইজেশন থেকে আলাদা যে মার্শালিং দূরবর্তী বস্তুগুলিকে বিশেষভাবে আচরণ করে। (আরএফসি 2713)

কোনও বস্তুকে "সিরিয়ালাইজ" করা মানে তার রাজ্যটিকে এমনভাবে বাইট স্ট্রিমে রূপান্তর করা যাতে বাইট স্ট্রিমটি আবার বস্তুর অনুলিপিতে রূপান্তর করতে পারে।

সুতরাং, মার্শালিং তার রাজ্যের পাশাপাশি বাইট স্ট্রিমে কোনও সামগ্রীর কোডবেসও সংরক্ষণ করে ।


1
আপনার অর্থ একটি অবজেক্ট, যদি আনসিরিয়ালিড করা হয় তবে কেবলমাত্র রাষ্ট্র থাকতে পারে, কোনও কোডবেস থাকবে না অর্থাত্ এর কোনও ক্রিয়াকলাপ বলা যাবে না, এটি কেবল একটি কাঠামোগত ডেটা টাইপ। এবং, যদি একই জিনিসটি মার্শাল করা হয় তবে এর কাঠামোর সাথে এর কোডবেস থাকবে এবং একবার তার ফাংশনগুলি কল করতে পারবে?
bjan

11
"কোডবেস" এর অর্থ আসলে "কোড" নয়। " হাউস কোডবেস কীভাবে কাজ করে" ( goo.gl/VOM2Ym ) থেকে কোডবেসটি খুব সহজভাবে বলা যায় যে, যে সমস্ত প্রোগ্রামগুলি যেগুলি রিমোট ক্লাস লোডিংয়ের আরএমআইয়ের শব্দার্থবিজ্ঞান ব্যবহার করে তারা নতুন ক্লাসগুলি কীভাবে খুঁজে পায়। যখন কোনও বস্তুর প্রেরক সেই বস্তুকে অন্য জেভিএম-তে সংক্রমণের জন্য সিরিয়ালাইজ করে, তখন এটি কোডবেস নামক তথ্যের সাথে বাইটের ক্রমিকিত ধারাটি বারণ করে। এই তথ্য প্রাপককে বলে যেখানে এই বস্তুর বাস্তবায়ন পাওয়া যাবে। কোডবেস টীকাতে সঞ্চিত প্রকৃত তথ্য হল ইউআরএলগুলির একটি তালিকা যা থেকে প্রয়োজনীয় বস্তুর জন্য শ্রেণিবদ্ধ ডাউনলোড করা যেতে পারে।
জিউসেপ বার্টোন

2
@ নিউরোন যে সংজ্ঞাটি জিনি এবং আরএমআই-এর জন্য নির্দিষ্ট। "কোডবেস" একটি সাধারণ শব্দ। en.wikedia.org/wiki/Codebase
বিল লিজার্ড

2
@ বিল্টলিজার্ড হ্যাঁ, তবে আপনি জাভাতে মার্শালিংয়ের কথা বলছেন বলে, এটি ভুল বলা যায় যে সিরিয়ালাইজেশন এবং মার্শালিংয়ের মধ্যে পার্থক্য হ'ল "মার্শালিং তার রাজ্যের পাশাপাশি বস্তুর কোড সংরক্ষণ করে", এবং এটি বাজনের প্রশ্নের দিকে নিয়ে যায়। মার্শেলিং বস্তুর স্থিতি ছাড়াও "কোডবেস" সংরক্ষণ করে।
জিউসেপ বার্টোন

19

আমি মনে করি যে মূল পার্থক্যটি হ'ল মার্শালিংয়ের মধ্যে সম্ভবত কোডবেসও জড়িত। অন্য কথায়, আপনি কোনও শ্রেণীর রাজ্য-সমতুল্য উদাহরণে কোনও বস্তু মার্শাল এবং আনমারশাল করতে সক্ষম হবেন না। ।

সিরিয়ালাইজেশনের অর্থ হ'ল আপনি অন্য কোনও শ্রেণীর উদাহরণ হলেও, আপনি অবজেক্টটি সঞ্চয় করতে এবং একটি সমতুল্য অবস্থা পুনরুদ্ধার করতে পারেন।

বলা হচ্ছে, এগুলি সাধারণত প্রতিশব্দ।


2
আপনি কি কোনও অবজেক্টকে বোঝাচ্ছেন, যদি আনসিরিয়ালাইজড করা হয় তবে কেবল স্টেট থাকতে পারে, কোনও কোডবেস থাকবে না অর্থাৎ এর ফাংশনটির কোনওটিই বলা যাবে না, এটি কেবল একটি কাঠামোগত ডাটা টাইপ। এবং, যদি একই বস্তুটি মার্শাল করা হয় তবে এর কাঠামোর পাশাপাশি এর কোডবেস থাকবে এবং কেউ তার ফাংশনগুলি কল করতে পারে?
bjan

18

মার্শালিং বলতে কোনও ফাংশনের স্বাক্ষর এবং পরামিতিগুলিকে একক বাইট অ্যারে রূপান্তরিত করতে বোঝায়। বিশেষত আরপিসির উদ্দেশ্যে।

সিরিয়ালাইজেশন প্রায়শই একটি সম্পূর্ণ অবজেক্ট / অবজেক্ট ট্রিকে বাইট অ্যারে রূপান্তরিত করতে বোঝায় মার্শালিং বস্তু পরামিতিগুলিকে বার্তায় যুক্ত করার জন্য এবং এটি নেটওয়ার্ক জুড়ে পাস করার জন্য ক্রমিক করে তোলে * সিরিয়ালাইজেশনটি স্টোর থেকে ডিস্কের জন্যও ব্যবহার করা যেতে পারে *


11

মার্শেলিং হ'ল নিয়মটি সংকলককে বলে যে কীভাবে ডেটা অন্য পরিবেশ / সিস্টেমে উপস্থাপন করা হবে; উদাহরণ স্বরূপ;

[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
public string cFileName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 14)]
public string cAlternateFileName;

যেহেতু আপনি দুটি পৃথক স্ট্রিং মান দেখতে পাচ্ছেন বিভিন্ন মানের ধরণের হিসাবে উপস্থাপিত।

সিরিয়ালাইজেশন কেবল বস্তুর সামগ্রীকে রূপান্তর করবে, উপস্থাপনা নয় (একই থাকবে) এবং সিরিয়ালাইজেশনের নিয়মগুলি মানবে (কী রফতানি করবে বা না)। উদাহরণস্বরূপ, ব্যক্তিগত মানগুলি ক্রমিকায়িত হবে না, সর্বজনীন মান হ্যাঁ এবং অবজেক্টের কাঠামো একই থাকবে।


7

এখানে উভয়ের আরও নির্দিষ্ট উদাহরণ রয়েছে:

ক্রমিকায়নের উদাহরণ:

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

typedef struct {
    char value[11];
} SerializedInt32;

SerializedInt32 SerializeInt32(int32_t x) 
{
    SerializedInt32 result;

    itoa(x, result.value, 10);

    return result;
}

int32_t DeserializeInt32(SerializedInt32 x) 
{
    int32_t result;

    result = atoi(x.value);

    return result;
}

int main(int argc, char **argv)
{    
    int x;   
    SerializedInt32 data;
    int32_t result;

    x = -268435455;

    data = SerializeInt32(x);
    result = DeserializeInt32(data);

    printf("x = %s.\n", data.value);

    return result;
}

সিরিয়ালাইজেশনে, ডেটা এমনভাবে সমতল করা হয় যা পরে সংরক্ষণ করা যায় এবং অপরিবর্তনীয় হতে পারে।

মার্শালিং ডেমো:

(MarshalDemoLib.cpp)

#include <iostream>
#include <string>

extern "C"
__declspec(dllexport)
void *StdCoutStdString(void *s)
{
    std::string *str = (std::string *)s;
    std::cout << *str;
}

extern "C"
__declspec(dllexport)
void *MarshalCStringToStdString(char *s)
{
    std::string *str(new std::string(s));

    std::cout << "string was successfully constructed.\n";

    return str;
}

extern "C"
__declspec(dllexport)
void DestroyStdString(void *s)
{
    std::string *str((std::string *)s);
    delete str;

    std::cout << "string was successfully destroyed.\n";
}

(MarshalDemo.c)

#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

int main(int argc, char **argv)
{
    void *myStdString;

    LoadLibrary("MarshalDemoLib");

    myStdString = ((void *(*)(char *))GetProcAddress (
        GetModuleHandleA("MarshalDemoLib"),
        "MarshalCStringToStdString"
    ))("Hello, World!\n");

    ((void (*)(void *))GetProcAddress (
        GetModuleHandleA("MarshalDemoLib"),
        "StdCoutStdString"
    ))(myStdString);

    ((void (*)(void *))GetProcAddress (
        GetModuleHandleA("MarshalDemoLib"),
        "DestroyStdString"
    ))(myStdString);    
}

মার্শালিংয়ে, ডেটা প্রয়োজনীয়ভাবে সমতল করার প্রয়োজন হয় না, তবে এটি অন্য বিকল্প উপস্থাপনায় রূপান্তরিত হওয়া দরকার। সমস্ত ingালাই মার্শালিং হয় তবে সমস্ত মার্শালিং কাস্টিং হয় না।

মার্শালিং জড়িত থাকতে গতিশীল বরাদ্দ প্রয়োজন হয় না, এটি কেবল স্ট্রাক্টের মধ্যে রূপান্তর হতে পারে। উদাহরণস্বরূপ, আপনার একটি জুড়ি থাকতে পারে তবে ফাংশনটি এই জুটির প্রথম এবং দ্বিতীয় উপাদানগুলি অন্য উপায়ে প্রত্যাশা করে; আপনি এক জোড়া অন্যকে কাস্টিং / মেমপিপি কাজ করবেন না কারণ fst এবং snd ফ্লিপ হয়ে যাবে।

#include <stdio.h>

typedef struct {
    int fst;
    int snd;
} pair1;

typedef struct {
    int snd;
    int fst;
} pair2;

void pair2_dump(pair2 p)
{
    printf("%d %d\n", p.fst, p.snd);
}

pair2 marshal_pair1_to_pair2(pair1 p)
{
    pair2 result;
    result.fst = p.fst;
    result.snd = p.snd;
    return result;
}

pair1 given = {3, 7};

int main(int argc, char **argv)
{    
    pair2_dump(marshal_pair1_to_pair2(given));

    return 0;
}

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

আমি সম্প্রতি একটি বিরক্তি পেয়েছিলাম যে জেএসক্রিপ্ট মার্শালকে সি # তে "__ComObject" হিসাবে সাজিয়েছে এবং এই অবজেক্টটির সাথে খেলার কোনও নথিভুক্ত উপায় নেই। আমি এটি কোথায় ছিল তার ঠিকানাটি খুঁজে পেতে পারি তবে আমি এটি সম্পর্কে সত্যিকার অর্থে অন্য কিছু জানি না, সুতরাং এটির সত্যিকারের উপায় খুঁজে বের করার একমাত্র উপায় হ'ল এটি যেকোন উপায়ে ঠাট্টা করা এবং আশা করা যায় যে এটি সম্পর্কে দরকারী তথ্য সন্ধান করতে পারি। সুতরাং স্ক্রিপ্টিং-এর মতো বন্ধুত্বপূর্ণ ইন্টারফেসের সাহায্যে একটি নতুন অবজেক্ট তৈরি করা সহজ হয়ে যায় ictionaryডিকোরিয়াল, এতে জেএসক্রিপ্ট অ্যারে অবজেক্ট থেকে ডেটা অনুলিপি করুন এবং সেই বস্তুটি জেএসক্রিপ্টের ডিফল্ট অ্যারের পরিবর্তে সি # তে দিন।

test.js:

var x = new ActiveXObject("Dmitry.YetAnotherTestObject.YetAnotherTestObject");

x.send([1, 2, 3, 4]);

YetAnotherTestObject.cs

using System;
using System.Runtime.InteropServices;

namespace Dmitry.YetAnotherTestObject
{
    [Guid("C612BD9B-74E0-4176-AAB8-C53EB24C2B29"), ComVisible(true)]
    public class YetAnotherTestObject
    {
        public void send(object x)
        {
            System.Console.WriteLine(x.GetType().Name);
        }
    }
}

উপরের প্রিন্টগুলি "__ComObject", যা সি # এর দৃষ্টিকোণ থেকে কিছুটা কালো বক্স is

আরেকটি আকর্ষণীয় ধারণাটি হ'ল আপনার কোডটি কীভাবে লিখবেন তা বোঝার থাকতে পারে এবং একটি কম্পিউটার যা নির্দেশাবলী কার্যকর করতে হয় তা জানে তাই প্রোগ্রামার হিসাবে আপনি কম্পিউটারটি আপনার মস্তিষ্ক থেকে প্রোগ্রামটিতে কী করতে চান তা ধারণাকে কার্যকরভাবে মার্শাল করছেন are চিত্র। আমাদের যদি পর্যাপ্ত পরিমাণে মার্শালার থাকে তবে আমরা কী করতে / পরিবর্তন করতে চাই তা কেবল ভাবতে পারি এবং কীবোর্ডে টাইপ না করে প্রোগ্রামটি সেভাবেই বদলে যাবে। সুতরাং, আপনি যদি সত্যিই সেমিকোলনটি লিখতে চান যেখানে কয়েক সেকেন্ডের জন্য আপনার মস্তিস্কের সমস্ত শারীরিক পরিবর্তনগুলি সংরক্ষণ করার উপায় থাকতে পারে, আপনি সেমিকোলন মুদ্রণের জন্য সিগন্যালে সেই ডেটা মার্শাল করতে পারেন, তবে এটি চূড়ান্ত।


4

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


4

মার্শেলিং সম্পর্কে আমার উপলব্ধি অন্যান্য উত্তরগুলির চেয়ে আলাদা।

ধারাবাহিকতাতে:

কোনও কনভেনশন ব্যবহার করে কোনও অবজেক্ট গ্রাফের তার-বিন্যাসের সংস্করণ উত্পাদন বা পুনরায় হাইড্রেট করতে।

marshalling:

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

চুক্তি প্রথম উন্নয়ন:

চুক্তির প্রথম বিকাশের প্রসঙ্গে মার্শেলিং গুরুত্বপূর্ণ।

  • বাহ্যিক ইন্টারফেসটি সময়ের সাথে স্থিতিশীল রাখার সাথে সাথে কোনও অভ্যন্তরীণ বস্তু গ্রাফে পরিবর্তন আনা সম্ভব। এইভাবে পরিষেবাটির সমস্ত গ্রাহককে প্রতিটি তুচ্ছ পরিবর্তনের জন্য পরিবর্তন করতে হবে না।
  • বিভিন্ন ভাষায় ফলাফল ম্যাপ করা সম্ভব। উদাহরণস্বরূপ, এক ভাষার সম্পত্তি নাম কনভেনশন থেকে ('সম্পত্তি_নাম') থেকে অন্যটিতে ('সম্পত্তি নাম')।

1
//, আমি কি এখানে, বিশেষত, "রেহাইড্রেট" এর অর্থ সম্পর্কে আরও জানতে পারি, এখানে উত্তর দেওয়া হয়েছে, @ জ্যাসপার ব্লুজ? আমি অনুমান করছি এটি কেবল নভোচারী খাবারের জন্য নয়।
নাথান বাসানিজ

- এই উত্তর অনুযায়ী @NathanBasanese stackoverflow.com/a/6991192/5101816 : - এর (পুনরায়) hydrating সংজ্ঞা নিম্নলিখিত ভাষায় রয়েছেHydrating an object is taking an object that exists in memory, that doesn't yet contain any domain data ("real" data), and then populating it with domain data (such as from a database, from the network, or from a file system).
pxsx

3

বুনিয়াদি প্রথম

বাইট স্ট্রিম - স্ট্রিম হচ্ছে ডেটার ক্রম sequ ইনপুট স্ট্রিম - উত্স থেকে ডেটা পড়ে। আউটপুট স্ট্রিম - বর্নণে ডেটা লিখে। জাভা বাইট স্ট্রিমগুলি ইনপুট / আউটপুট বাইট বাই বাইট (একসাথে 8 বিট) সম্পাদন করতে ব্যবহৃত হয়। বাইটারি স্ট্রিম বাইনারি ফাইলগুলির মতো কাঁচা ডেটা প্রক্রিয়াকরণের জন্য উপযুক্ত। জাভা চরিত্রের স্ট্রিমগুলি একবারে ইনপুট / আউটপুট 2 বাইট সম্পাদন করতে ব্যবহৃত হয়, কারণ জাভাতে ইউনিকোড কনভেনশনগুলি ব্যবহার করে প্রতিটি চরিত্রের জন্য 2 বাইট ব্যবহার করে অক্ষরগুলি সংরক্ষণ করা হয়। অক্ষর প্রবাহটি দরকারী যখন আমরা পাঠ্য ফাইলগুলি প্রক্রিয়াকরণ করি (পড়ি / লিখি)।

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


সিরিয়ালাইজেশন এবং মার্শালিং উভয়ই শিথিলভাবে প্রতিশব্দ হিসাবে ব্যবহৃত হয়। এখানে কয়েকটি পার্থক্য রয়েছে।

সিরিয়ালাইজেশন - কোনও বস্তুর ডেটা সদস্যগণ বাইনারি ফর্ম বা বাইট স্ট্রিমে লিখিত হয় (এবং তারপরে ফাইল / মেমরি / ডাটাবেস ইত্যাদিতে লেখা যেতে পারে)। একবার বস্তুর ডেটা সদস্যদের বাইনারি ফর্মে লিখিত হয়ে গেলে তথ্য-প্রকার সম্পর্কিত কোনও তথ্য ধরে রাখা যায় না।

এখানে চিত্র বর্ণনা লিখুন

মার্শেলিং - অবজেক্টটি সিরিয়ালযুক্ত করা হয় (বাইনারি ফর্ম্যাটে বাইট স্ট্রিম থেকে) ডেটা-টাইপ + কোডবেস সংযুক্ত করে এবং তারপরে রিমোট অবজেক্ট (আরএমআই) কেটে যায় । মার্শালিং ডেটা-টাইপকে পূর্বনির্ধারিত নামকরণ কনভেনশনে রূপান্তরিত করবে যাতে এটি প্রাথমিক ডেটা টাইপের সাথে সম্মতি দিয়ে পুনর্গঠন করা যায়। এখানে চিত্র বর্ণনা লিখুন

সুতরাং সিরিয়ালাইজেশন মার্শেলিংয়ের অংশ।

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

সিরিয়ালাইজেশন হ'ল অবজেক্ট (গুলি) দ্বারা ব্যবহৃত মেমরির মূ .় মেমরি-ডাম্পের মতো, যখন মার্শালিং কাস্টম ডেটা-টাইপ সম্পর্কিত তথ্য সঞ্চয় করে।

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

সিরিয়ালাইজেশনে বিগ-এন্ডিয়ান, ছোট-এন্ডিয়ান সম্পর্কিত কিছু সমস্যা থাকতে পারে যদি ভিন্ন ওএসের একই উপাত্ত উপস্থাপনের বিভিন্ন উপায় থাকে তবে স্ট্রিমটি একটি ওএস থেকে অন্য OS এ চলেছে। অন্যদিকে, মার্শেলিং ওএসের মধ্যে স্থানান্তরিত করতে পুরোপুরি ঠিক আছে কারণ ফলাফলটি উচ্চ স্তরের প্রতিনিধিত্ব।


1

মার্শালিং প্রকৃতপক্ষে সিরিয়ালাইজেশন প্রক্রিয়া ব্যবহার করে তবে প্রধান পার্থক্যটি হ'ল এটি কেবল সিরিয়ালাইজেশনে ডেটা সদস্য এবং বস্তু নিজেই স্বাক্ষর নয় সিরিয়ালীকৃত হয় তবে মার্শালিং অবজেক্ট + কোড বেসে (এর প্রয়োগ) বাইটেও রূপান্তরিত হবে।

মার্শেলিং হ'ল JAXB ব্যবহার করে জাভা অবজেক্টকে XML অবজেক্টে রূপান্তর করার প্রক্রিয়া যাতে এটি ওয়েব পরিষেবায় ব্যবহার করা যায়।


0

এটিকে প্রতিশব্দ হিসাবে ভাবেন, দু'জনেরই এমন একটি প্রযোজক রয়েছে যা গ্রাহককে স্টাফ প্রেরণ করে ... উদাহরণের শেষের ক্ষেত্রগুলিতে একটি বাইট স্ট্রিমে লেখা হয় এবং অন্য প্রান্তটি একই উদাহরণগুলির সাথে বিপরীত অ্যান্ডসকে শত্রু করে তোলে।

এনবি - জাভা আরএমআইতে প্রাপক থেকে নিখোঁজ থাকা ক্লাসগুলি পরিবহণের জন্য সমর্থনও রয়েছে ...

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