আমাদের সিরিয়ালাইজেবল ইন্টারফেস কখন কার্যকর করা উচিত?


153
public class Contact implements Serializable {
    private String name;
    private String email;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}
  1. আমি কখন Serializableইন্টারফেস বাস্তবায়ন করা উচিত ?
  2. আমরা কেন ওটা করি।
  3. এটি কোনও সুবিধা বা সুরক্ষা দেয়?

1
এফওয়াইআই এখানে স্বীকৃত উত্তরটি অসম্পূর্ণ এবং বিভ্রান্তিমূলক, কারণ এটি সুরক্ষার ঘাটতিগুলিকে সমাধান করে না। দেখুন কার্যকরী জাভা , আইটেমটি 86: মহান সতর্কতার সাথে Serializable বাস্তবায়ন। সিরিয়ালাইজেশন ব্যবহার করবেন না বলে এখানে রইদওয়াল্ডের উত্তরটি সঠিক।
নাথান হিউজেস

উত্তর:


157
  1. থেকে কি এই "ধারাবাহিকতাতে" জিনিস খবর সবার? :

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

    স্টার ট্রেকের ট্রান্সপোর্টারটির মতো এগুলি জটিল কিছু গ্রহণ এবং এটিকে 1s এবং 0 এর সমতল সিকোয়েন্সে রূপান্তরিত করা, তারপরে 1s এবং 0 এর ক্রমটি নিয়ে যাওয়া (সম্ভবত অন্য জায়গায়, সম্ভবত অন্য সময়ে) এবং মূল জটিল পুনর্গঠন করা " কিছু। "

    সুতরাং, Serializableযখন আপনাকে অবজেক্টের একটি অনুলিপি সঞ্চয় করতে হবে তখন ইন্টারফেসটি বাস্তবায়ন করুন , সেগুলি অন্য সিস্টেমে প্রেরণ করুন যা একই সিস্টেমে বা নেটওয়ার্কে চলে।

  2. কারণ আপনি কোনও বস্তু সংরক্ষণ বা প্রেরণ করতে চান।

  3. এটি স্টোরেজ এবং প্রেরণগুলি সহজ করে তোলে। সুরক্ষার সাথে এর কোন যোগসূত্র নেই।


4
সমস্ত ডোমেন মডেলগুলিতে সিরিয়্যাবলাইজড ইন্টারফেস প্রয়োগ করা কি সেরা অনুশীলন ...
দ্য জাভা

8
@ জাভা এটি সর্বোত্তম অনুশীলনের প্রশ্ন নয়। আপনার সিরিজ বাইট দরকার কিনা তা একটি প্রশ্ন।
মoinনুদিন

5
জেএসএন ব্যবহার করার সময় আপনাকে এই ইন্টারফেসটি প্রয়োগ করতে হবে না এবং কেবল সেই স্ট্রিংটি পাঠাতে পারবেন .. সুতরাং আপনি যখন জেএসএন ব্যবহার করতে পারবেন তখন কেন এই ইন্টারফেসটি ব্যবহার করবেন তা আমি এখনও নিশ্চিত নই।
ইয়োনাতান নীর

1
@ যোনাতননির আমি নিশ্চিত নই যে এমএসজিপ্যাক, অভ্র, থ্রিফট বা প্রোটোবুফ যখন আইও স্থানান্তর করার জন্য আরও ভাল হয় তখন কেন কেউ জেএসএন ব্যবহার করবে।
ক্রিকেটার এর এয়ার

1
@ YonatanNir একটি কঠোর সংজ্ঞায়িত স্কিমা আরও ভাল। এবং জেএসএন হ'ল মানব পাঠযোগ্য, যদিও বাইনারি
এনকোডযুক্ত

48
  1. বাস্তবায়ন Serializableইন্টারফেস যখন আপনি বাইট একটি সিরিজ অথবা যখন আপনি কি মনে করেন একটি যে মধ্যে একটি ক্লাসের একটা নিদর্শন রূপান্তর করতে সক্ষম হতে চান Serializableবস্তুর আপনার ক্লাসের একটা নিদর্শন রেফারেন্স হতে পারে।

  2. Serializable ক্লাসগুলি দরকারী যখন আপনি সেগুলির নজির অব্যাহত রাখতে চান বা তাদের মাধ্যমে তাদের পাঠাতে চান।

  3. Serializableক্লাসের উদাহরণগুলি সহজেই প্রেরণ করা যায়। সিরিয়ালাইজেশনের কিছু সুরক্ষা পরিণতি রয়েছে। জোশুয়া ব্লচের কার্যকর জাভা পড়ুন ।


32

এই প্রশ্নের উত্তর হ'ল সম্ভবত আশ্চর্যজনকভাবে, কখনই নয় বা আরও বাস্তবসম্মতভাবে কেবল তখনই যখন আপনি উত্তরাধিকারের কোডের সাথে আন্তঃব্যবহারের জন্য বাধ্য হন । এটি কার্যকর জাভা, জোশুয়া ব্লুচের তৃতীয় সংস্করণে সুপারিশ :

আপনার লেখা যে কোনও নতুন সিস্টেমে জাভা সিরিয়ালাইজেশন ব্যবহার করার কোনও কারণ নেই

ওরাকলের প্রধান স্থপতি মার্ক রেইনহোল্ড বলেছেন যে বর্তমান জাভা সিরিয়ালাইজেশন প্রক্রিয়াটি অপসারণ একটি দীর্ঘমেয়াদী লক্ষ্য।


জাভা সিরিয়ালাইজেশন কেন ত্রুটিযুক্ত

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

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

পরিবর্তে কি করতে হবে

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


2
সেই স্তরের বিশেষজ্ঞের বেশি নয় তবে মনে হয় আপনি একটি পয়েন্ট পেয়েছেন।
নাইটফুরি

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