জাভা কেন ক্ষণস্থায়ী ক্ষেত্র আছে?


উত্তর:


1672

transientজাভা শব্দ নির্দেশ করে একটি ক্ষেত্র ধারাবাহিকতাতে অংশ (যার মানে রক্ষা করা উচিত হবে না ব্যবহার করা হয় মত প্রক্রিয়া একটি ফাইলে)।

থেকে জাভা ল্যাঙ্গুএজ স্পেসিফিকেশন, জাভা SE 7 সংস্করণ , অনুচ্ছেদ 8.3.1.3। transientক্ষেত্রসমূহ :

ভেরিয়েবলগুলি চিহ্নিত transientকরা যেতে পারে যে তারা কোনও বস্তুর স্থির অবস্থার অংশ নয় indicate

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

এখানে একটি GalleryImageশ্রেণি এখানে একটি চিত্র এবং চিত্র থেকে প্রাপ্ত একটি থাম্বনেইল রয়েছে:

class GalleryImage implements Serializable
{
    private Image image;
    private transient Image thumbnailImage;

    private void generateThumbnail()
    {
        // Generate thumbnail.
    }

    private void readObject(ObjectInputStream inputStream)
            throws IOException, ClassNotFoundException
    {
        inputStream.defaultReadObject();
        generateThumbnail();
    }    
}

এই উদাহরণে, এটি thumbnailImageএকটি থাম্বনেইল চিত্র যা generateThumbnailপদ্ধতিটি আহ্বানের মাধ্যমে উত্পন্ন হয় ।

thumbnailImageক্ষেত্র হিসেবে চিহ্নিত করা হয় transient, তাই শুধুমাত্র মূল imageউভয় মূল ইমেজ এবং থাম্বনেল চিত্র persisting বদলে ধারাবাহিকভাবে হয়। এর অর্থ সিরিয়ালযুক্ত বস্তুটি সংরক্ষণ করার জন্য কম স্টোরেজ প্রয়োজন হবে। (অবশ্যই, এটি সিস্টেমের প্রয়োজনীয়তার উপর নির্ভর করে কাঙ্ক্ষিত হতে পারে বা নাও পারে - এটি কেবল একটি উদাহরণ।)

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

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


221
তবে কেন এটি একটি কীওয়ার্ড, এবং কোনও টীকা নয় @DoNotSerialize?
এলাজার লাইবোভিচ

333
আমার ধারণা, এটি এমন এক সময়ের মালিকানাধীন যখন জাভাতে কোনও টিকা নেই।
পিটার উইপ্পারম্যান

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

7
@ এম জাফর: রিডঅবজেক্টটি সাধারণত ডিসরিয়ালাইজেশন পদ্ধতিতে বেঁধে রাখা হয় এবং এভাবে স্বয়ংক্রিয়ভাবে ডাকা হয়। তদ্ব্যতীত, অনেক ক্ষেত্রে আপনার এটিকে ওভাররাইড করার দরকার নেই - ডিফল্ট বাস্তবায়নটি কৌশলটি করে।
মাইক অ্যাডলার

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

434

মূলশব্দটি বোঝার আগে transientএকজনকে সিরিয়ালকরণের ধারণাটি বুঝতে হবে। পাঠক যদি সিরিয়ালাইজেশন সম্পর্কে জানেন তবে দয়া করে প্রথম বিষয়টি এড়িয়ে যান।

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

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

এখন transientকীওয়ার্ড এবং এর উদ্দেশ্য কী?

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

আমি নিম্নলিখিত উদাহরণ দিয়ে উপরোক্ত দুটি বিষয়গুলি ব্যাখ্যা করতে চাই:

package javabeat.samples;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

class NameStore implements Serializable{
    private String firstName;
    private transient String middleName;
    private String lastName;

    public NameStore (String fName, String mName, String lName){
        this.firstName = fName;
        this.middleName = mName;
        this.lastName = lName;
    }

    public String toString(){
        StringBuffer sb = new StringBuffer(40);
        sb.append("First Name : ");
        sb.append(this.firstName);
        sb.append("Middle Name : ");
        sb.append(this.middleName);
        sb.append("Last Name : ");
        sb.append(this.lastName);
        return sb.toString();
    }
}

public class TransientExample{
    public static void main(String args[]) throws Exception {
        NameStore nameStore = new NameStore("Steve", "Middle","Jobs");
        ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream("nameStore"));
        // writing to object
        o.writeObject(nameStore);
        o.close();

        // reading from object
        ObjectInputStream in = new ObjectInputStream(new FileInputStream("nameStore"));
        NameStore nameStore1 = (NameStore)in.readObject();
        System.out.println(nameStore1);
    }
}

এবং আউটপুট নিম্নলিখিত হবে:

First Name : Steve
Middle Name : null
Last Name : Jobs

মধ্য নামটি ঘোষিত হয়েছে transient, সুতরাং এটি অবিরাম স্টোরেজে সংরক্ষণ করা হবে না।

সূত্র


25
এই উদাহরণটি এই কোড থেকে নেওয়া হয়েছে, আপনি এটি এখানে পড়তে পারেন: javabeat.net/2009/02/ কি-is
কৃষ্ণ

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

5
যেহেতু মাঝের নাম স্পষ্ট হয় উদাহরণস্বরূপ, একটি খারাপ এক না একটি অস্থায়ী সম্পত্তি।
রাফেল

1
@ রাফেল আমার জন্য উদাহরণটি সহায়ক এবং কমপক্ষে ধারণাটি ব্যাখ্যা করে। আপনি সচেতন যদি আপনি আরও ভাল উদাহরণ প্রদান করবেন?
চাকলাদার আসফাক আরেফি

@ যোদা আমাদের NameFormatterড্রাইভ করার জন্য ব্যবহৃত একটি রেফারেন্স থাকতে পারে toString()। বা তথ্যের বিপরীতে কনফিগারেশন, বা দেখা, বা ব্যবসায়ের যুক্তি সম্পর্কিত ...
রাফেল

84

আপনাকে ভেরিয়েবলগুলি সংজ্ঞায়িত করার অনুমতি দেওয়ার জন্য যা আপনি সিরিয়ালাইজ করতে চান না।

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


36

আমার ছোট অবদান:

ক্ষণস্থায়ী ক্ষেত্র কী?
মূলত, transientকীওয়ার্ডের সাহায্যে সংশোধিত যে কোনও ক্ষেত্রই একটি ক্ষণস্থায়ী ক্ষেত্র।

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


transientকীওয়ার্ড এবং ক্ষণস্থায়ী ক্ষেত্র, কোন ক্ষেত্রকে ক্ষণস্থায়ী চিহ্নিত করতে হবে তা জানা গুরুত্বপূর্ণ। স্ট্যাটিক ক্ষেত্রগুলি সিরিয়ালিয়াল হয় না, সুতরাং সংশ্লিষ্ট কীওয়ার্ডটিও কৌশলটি করে। তবে এটি আপনার শ্রেণীর নকশা নষ্ট করতে পারে; এখানেই transientকীওয়ার্ডটি উদ্ধারে আসে। আমি চেষ্টা করি যে ক্ষেত্রগুলির মানগুলি অন্যের কাছ থেকে সিরিয়ালায়িত হওয়ার অনুমতি দেওয়া হয় না, তাই আমি তাদের ক্ষণস্থায়ী হিসাবে চিহ্নিত করি। আপনার যদি এমন একটি ক্ষেত্র বলা হয় interestযার মান অন্য ক্ষেত্রগুলি ( principal, rateএবং time) থেকে গণনা করা যায় , এটি ক্রমিক করার দরকার নেই।

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


63
আপনার 'সাধারণ বাক্য' নিছক একটি টোটোলজি। এটি কিছুই ব্যাখ্যা করে। আপনি এটি ছাড়া ভাল হতে চাই।
ব্যবহারকারী 207421

1
মাঠটি কোথায় হওয়া উচিত এটি একটি ভাল ব্যাখ্যাtransient
চাকলাদার আসফাক আরেফি

1
আগ্রহের ক্ষেত্র এবং শবুর সংখ্যাগুলি ক্ষণস্থায়ী ক্ষেত্রগুলির ভাল উদাহরণ।
তরুণ

1
আরেকটি ভাল ব্যবহারের ক্ষেত্রে: যদি আপনার অবজেক্টে সকেটের মতো উপাদান থাকে এবং আপনি যদি সিরিয়ালাইজ করতে চান তবে সকেটের কী হবে? যদি অবিরত থাকে, আপনি ডিসরিয়ালাইজ করার পরে সকেটটি কী থাকবে? সেই সকেটটিকে বস্তু হিসাবে তৈরি করা বোধগম্যtransient
মুহাম্মদ সিদ্দিক

28

একটি transientভেরিয়েবল একটি পরিবর্তনশীল যা সিরিয়ালাইজড নাও হতে পারে।

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


হ্যাঁ, "পাসওয়ার্ড বা ক্রেডিকার্ডপিন" ক্লাসের ফিল্ড সদস্যদের মতো কিছু জিনিস।
মতিন

17

transientশ্রেণিক ক্ষেত্রটি সিরিয়ালকরণের দরকার নেই তা বোঝাতে ব্যবহৃত হয় is সম্ভবত সর্বোত্তম উদাহরণ একটি Threadক্ষেত্র। Threadএটিকে সিরিয়ালায়িত করার কোনও কারণ নেই কারণ এর রাজ্যটি খুব 'প্রবাহ নির্দিষ্ট'।


আমি ভুল হলে আমাকে সংশোধন করুন, তবে থ্রেড সিরিয়ালযোগ্য নয় তাই যাইহোক এটি এড়িয়ে যাবেন?
টিফেনিস

3
@TFennis: যদি একটি serializable বর্গ Aরেফারেন্স একটি না serializable বর্গ B(যেমন Threadআপনার উদাহরণে), তারপর Aপারেন রেফারেন্স চিহ্নিত করতে হবে যেমন transientXOR যাও অর্ডার দিয়ে কিছু যুক্তিসঙ্গত করতে এ ডিফল্ট ধারাবাহিকতাতে প্রক্রিয়া ওভাররাইড আবশ্যক Bঅনুমান শুধুমাত্র serializable উপশ্রেণী XOR যাও এর Bআসলে রেফারেন্সড হয় (সুতরাং প্রকৃত সাবক্লাস অবশ্যই তাদের "খারাপ" পিতামাতার যত্ন নিতে হবে B) এক্সওআর স্বীকার করে নিন যে সিরিয়ালাইজেশন ব্যর্থ হবে। কেবলমাত্র একটি ক্ষেত্রে (ক্ষণস্থায়ী হিসাবে চিহ্নিত) Bস্বয়ংক্রিয়ভাবে এবং নিঃশব্দে এড়ানো যায়।
এএইচ

3
@ টিফেনিস না, এটি একটি ব্যতিক্রম ঘটায়।
ব্যবহারকারী 207421

1
@ এএইচ: এক্সওর কেন? আমি মনে করি যে কোডগুলির মধ্যে যে কোনও সংমিশ্রণটি কাজ করেছিল, এবং কিছু সংমিশ্রণগুলি কার্যকর হতে পারে (উদাহরণস্বরূপ, ডিফল্ট সিরিয়ালাইজেশন প্রক্রিয়াটিকে ওভাররাইড করা কার্যকর হতে পারে এমনকি কেবল বি এর সিরিয়ালাইজযোগ্য সাবক্লাসগুলি রেফারেন্স করা হলেও, এবং বিপরীতে)।
সুপারক্যাট

15

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

আমি বিশ্বাস করি যে সংশোধনকারীটির আলঙ্কারিক অর্থ হ'ল "এই ক্ষেত্রটি কেবলমাত্র মেমরির ব্যবহারের জন্য। যেমন আপনি অন্য ভিএম মেমরি স্পেসে এর মানটির উপর নির্ভর করতে পারবেন না। অনেকটা অস্থিরতার অর্থ আপনি নির্দিষ্ট মেমরি এবং থ্রেড সিনটিকের উপর নির্ভর করতে পারবেন না।


14
আমি মনে করি যে transientএটি কোনও কীওয়ার্ড হবে না যদি এটি এই সময়ে ডিজাইন করা হত। তারা সম্ভবত কোনও টিকা ব্যবহার করবে।
জোচিম সউর 14


7

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

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

public class Foo implements Serializable 
{
 private String attr1;
 private String attr2;
 ...
}

এখন যদি তুমি না কি করতে চান স্থানান্তর / সংরক্ষিত এই বস্তুর ক্ষেত্রে তাই , আপনি ব্যবহার করতে পারেন শব্দ transient

private transient attr2;

উদাহরণ


6

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


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

1
@ glen3b এই উত্তরটি এই উত্তরটিকে বাদ দেয়নি। পোস্টার উল্লিখিত ক্ষেত্রে জিনিসগুলি দাঁড় করায় এটি অবশ্যই প্রয়োজন।
ব্যবহারকারী 207421

3

গুগলের ক্ষণস্থায়ী অর্থ হিসাবে == কেবল অল্প সময়ের জন্য স্থায়ী; অস্থায়ী।

এখন আপনি যদি জাভাতে কিছু ক্ষণস্থায়ী করতে চান তবে ট্রান্সিয়েন্ট কীওয়ার্ডটি ব্যবহার করুন।

প্রশ্ন: ক্ষণস্থায়ী কোথায় ব্যবহার করবেন?

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

transient int result=10;

দ্রষ্টব্য: ক্ষণস্থায়ী ভেরিয়েবল স্থানীয় হতে পারে না।


0

সহজ কথায়, ক্ষণস্থায়ী জাভা কীওয়ার্ড ক্ষেত্রগুলি তাদের অস্থায়ী ক্ষেত্রের কাউন্টার অংশ হিসাবে সিরিয়ালাইজ করা থেকে রক্ষা করে।

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

public abstract class BaseJob implements Serializable{
   public void ShouldRetryRun(){}
}

public class SyncOrganizationJob extends BaseJob {

   public String organizationName;
   public Boolean isSynced

   @Inject transient RemoteDataSource remoteDataSource;
   @Inject transient LocalDaoSource localDataSource;

   public SyncOrganizationJob(String organizationName) {
     super(new 
         Params(BACKGROUND).groupBy(GROUP).requireNetwork().persist());

      this.organizationName = organizationName;
      this.isSynced=isSynced;

   }
}

0

স্থানান্তর-কীওয়ার্ডের জন্য সরলীকৃত উদাহরণ কোড।

import java.io.*;

class NameStore implements Serializable {
    private String firstName, lastName;
    private transient String fullName;

    public NameStore (String fName, String lName){
        this.firstName = fName;
        this.lastName = lName;
        buildFullName();
    }

    private void buildFullName() {
        // assume building fullName is compuational/memory intensive!
        this.fullName = this.firstName + " " + this.lastName;
    }

    public String toString(){
        return "First Name : " + this.firstName
            + "\nLast Name : " + this.lastName
            + "\nFull Name : " + this.fullName;
    }

    private void readObject(ObjectInputStream inputStream)
            throws IOException, ClassNotFoundException
    {
        inputStream.defaultReadObject();
        buildFullName();
    }
}

public class TransientExample{
    public static void main(String args[]) throws Exception {
        ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream("ns"));
        o.writeObject(new NameStore("Steve", "Jobs"));
        o.close();

        ObjectInputStream in = new ObjectInputStream(new FileInputStream("ns"));
        NameStore ns = (NameStore)in.readObject();
        System.out.println(ns);
    }
}

0

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

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