java - মওয - জাভা ক্লাস কি



এর অর্থ কী: সিরিয়ালাইজেল ক্লাস একটি স্ট্যাটিক চূড়ান্ত serialVersionUID ক্ষেত্র ঘোষণা করে না? (4)

এই প্রশ্নটি ইতিমধ্যে একটি উত্তর আছে:

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

পিএস আমি জানি OOP কি। আমি বস্তু, বর্গ, পদ্ধতি, ক্ষেত্র এবং তাত্ক্ষণিক কি জানি।

পিপিএস যদি কেউ আমার কোড প্রয়োজন এটা এখানে:

import java.awt.*;
import javax.swing.*;


public class HelloWorldSwing extends JFrame {

        JTextArea m_resultArea = new JTextArea(6, 30);

        //====================================================== constructor
        public HelloWorldSwing() {
            //... Set initial text, scrolling, and border.
            m_resultArea.setText("Enter more text to see scrollbars");
            JScrollPane scrollingArea = new JScrollPane(m_resultArea);
            scrollingArea.setBorder(BorderFactory.createEmptyBorder(10,5,10,5));

            // Get the content pane, set layout, add to center
            Container content = this.getContentPane();
            content.setLayout(new BorderLayout());
            content.add(scrollingArea, BorderLayout.CENTER);
            this.pack();
        }

        public static void createAndViewJFrame() {
            JFrame win = new HelloWorldSwing();
            win.setTitle("TextAreaDemo");
            win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            win.setVisible(true);
        }

        //============================================================= main
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable(){
                public void run(){
                    createAndViewJFrame();
                }
            });
        }

}

সিরিয়ালাইজেশন (অতিরিক্ত ক্ষেত্র, সরানো ক্ষেত্র, ক্ষেত্রের ক্রম পরিবর্তন, ...) পরিবর্তন যে কোন পরিবর্তন যখন এটি পরিবর্তন করা আবশ্যক

এটি সঠিক নয় এবং আপনি সেই দাবির জন্য একটি অনুমোদনযোগ্য উত্স উল্লেখ করতে অক্ষম হবেন। যখনই আপনি কোনও পরিবর্তন করেন তখন এটি পরিবর্তন করা উচিত যেটি বস্তু ক্রিয়াকাণ্ডের নির্দিষ্টকরণের সিরিয়ালাইজেবেল অবজেক্টস সংস্করণে প্রদত্ত বিধিগুলির অধীনে অসঙ্গতিপূর্ণ, যা বিশেষভাবে অতিরিক্ত ক্ষেত্র বা ক্ষেত্রের ক্রম পরিবর্তন করে না এবং যখন আপনি readObject(), writeObject(), প্রদান readObject(), writeObject(), এবং / অথবা readResolve() অথবা /writeReplace() পদ্ধতি এবং / অথবা একটি serializableFields ঘোষণা যা পরিবর্তনটির সাথে সামলাতে পারে।


অন্যান্য উত্তর পর্যন্ত অনেক প্রযুক্তিগত তথ্য আছে। আমি সহজ শর্তে, অনুরোধ হিসাবে উত্তর দিতে চেষ্টা করবে।

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

আপনার যদি আপনার @SuppressWarnings("serial") কোনও অভিপ্রায় না থাকে তবে আপনি কেবল আপনার বর্গের @SuppressWarnings("serial") উপরে টীকা যুক্ত করতে পারেন।

আপনি সিরিয়ালাইজ করতে যাচ্ছেন, তাহলে UUID এর যথাযথ ব্যবহারের জন্য কেন্দ্রস্থল সম্পর্কে আপনার সমস্ত কিছু নিয়ে চিন্তা করতে হবে। মূলত, UUID একটি "সংস্করণ" এমন একটি অবজেক্ট যা আপনি সিরিয়ালাইজ করবেন, যাতে কোনও ক্রিয়াটি ডি-সিরিয়ালাইজেশানটি জানে যে এটি সঠিকভাবে ডি-সিরিয়ালাইজেশন করছে। আমি আরো তথ্যের জন্য serialized বস্তুর জন্য সঠিক সংস্করণ নিয়ন্ত্রণ নিশ্চিত করতে হবে।


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

উল্লেখ্য যে এই মানটি বিশেষ হিসাবে এটি উপরে বর্ণিত কারণগুলির জন্য এটি স্ট্যাটিক থাকা সত্ত্বেও ক্রিয়াশীল।


javadoc থেকে:

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

আপনি আপনার আইডিই কনফিগার করতে পারেন:

  • সতর্কতা অবলম্বন করার পরিবর্তে এটিকে উপেক্ষা করুন।
  • একটি আইডি autogenerate

আপনার অতিরিক্ত প্রশ্ন অনুসারে "আমার GUI অ্যাপ্লিকেশনটি কী স্থগিত করা হয়েছে তা নিয়ে আলোচনার সতর্কতা বার্তা একটি কারণ হতে পারে?":

না, এটা হতে পারে না। এটি কেবলমাত্র একটি সমস্যা সৃষ্টি করতে পারে যদি আপনি বস্তুগুলিকে ক্রমানুসারে ক্রমানুসারে এবং কোনও পৃথক স্থানে (বা সময়) যেখানে (কখন) শ্রেণীটি পরিবর্তিত হয় InvalidClassException এবং এটি হিমায়িত হতে পারে না, তবে InvalidClassException কারণ হতে InvalidClassException





serialversionuid