ফাইল ফর্ম্যাট তৈরি করার জন্য কি কোনও সঠিক উপায় আছে?


12

আমি তথ্য সংরক্ষণের জন্য এবং সম্ভবত লাইন প্রকল্পের সম্পদের নিচে সি # .NET- এ লিখেছি এমন একটি অ্যাপ্লিকেশনটির জন্য মালিকানা ফাইল ফর্ম্যাটটি তৈরি করছি। এটি কোনও উপায়ে কীভাবে করা যায় তার কোনও মান আছে? আমি কেবল Serializeআমার জিনিসগুলিতে বাইনারি হয়ে যাচ্ছিলাম এবং একটি শিরোনাম তৈরি করছিলাম যা আমাকে কীভাবে ফাইলটি বিশ্লেষণ করতে পারে তা বলবে। এটা কি খারাপ দৃষ্টিভঙ্গি?


2
আমি এড়াতে হবে BinaryFormatter
কোডসইনচাউস

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

ফর্ম্যাটটি সঠিকভাবে নথিভুক্ত করতে ভুলবেন না
বেসিল স্টারিনকিভিচ

উত্তর:


11

XMLSerializerক্লাসটি ব্যবহার করে সম্ভবত আপনার কাঠামোটি এক্সএমএলকে সিরিয়ালাইজ করা সবচেয়ে সোজা-ফরোয়ার্ড পদ্ধতি । আপনার সম্ভবত একটি পৃথক শিরোনাম এবং বডি স্ট্রাকচার তৈরি করার প্রয়োজন হবে না - তবে সমস্ত সম্পদকে এক্সএমএলকে সিরিয়ালাইজ করুন। এটি আপনাকে আপনার নিজের প্রোগ্রামের বাইরে আপনার ফাইল কাঠামোটি সহজেই পরিদর্শন / সম্পাদনা করার অনুমতি দেয় এবং এটি সহজেই পরিচালনাযোগ্য।

তবে, যদি আপনার ফাইলের কাঠামোটি জটিল আকারের, বিভিন্ন ধরণের বিভিন্ন ধরণের সম্পদ সমেত, যেমন সম্পূর্ণ কাঠামোটি এক্সএমএলকে সিরিয়ালীকরণ করা অত্যন্ত ভারী, আপনি প্রতিটি সম্পদ আলাদাভাবে সিরিয়ালকরণ করতে Packagingএবং সি # তে লাইব্রেরি ব্যবহার করে একটি একক প্যাকেজে সংকলন করতে পারেন # । এটি .docx, .xslx, .pptx, এবং অন্যান্য অফিস ফাইল ফর্ম্যাটগুলি কীভাবে নির্মিত হয় তা মূলত।


হ্যাঁ, আমার প্রকল্পটি কেবল তার চেয়ে অনেক জটিল, তবে আমি এটিকে কম ব্যবহারযোগ্য পঠনযোগ্য করার চেষ্টাও করছি কারণ আমরা লাইসেন্সের প্রসঙ্গে এই ক্ষেত্রগুলিতে স্থাপন করতে পারি। আমি বর্তমানে protobuf-netআমার ডেটা সিরিয়াল করতে ব্যবহার করছি এবং এটি দুর্দান্ত কাজ করে। তবে আমাকে আলাদা করে টুকরো সিরিয়াল করতে হবে, তাই আপনি প্যাকেজিং লাইব্রেরির সাথে যা বলছেন তা আমার যা প্রয়োজন তা শোনাচ্ছে।
কোরিলুলু

7
প্রিয় god
জেমস

2
@ জামেস হ্যাঁ এক্সএমএল এর অবশ্যই চূড়ান্ত দিক রয়েছে। আমি একই কারণে বেশিরভাগ ক্ষেত্রে প্যাকেজিং এবং এক্সএমএলকে সমর্থন করি: ১. এটি একটি পূর্ব-বিদ্যমান কাঠামো, সুতরাং কম প্রচেষ্টা দরকার। ২. অন্যান্য সিস্টেমগুলির পক্ষে এটি সমর্থন করা সহজ, যেহেতু এটি একটি বহুল স্বীকৃত মান। ৩. সিরিয়ালাইজেশন প্রক্রিয়া যাচাই করার জন্য ফলস্বরূপ ফাইলটি পরীক্ষা করা কোনও মানুষের পক্ষে সহজ।
PSwg

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


7

এমন কারও কাছ থেকে যাকে অনেকগুলি ফাইল ফর্ম্যাট বিশ্লেষণ করতে হয়েছিল, তার থেকে আমার ভিন্ন মতামত থেকে বেশিরভাগের কাছে এই বিষয়ে মতামত রয়েছে।

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

  • পিছনের সামঞ্জস্যের জন্য পরিকল্পনা। বিন্যাসটির সংস্করণ নম্বরটি কোনওভাবে সংরক্ষণ করুন যাতে আপনার সফ্টওয়্যারের পরবর্তী সংস্করণগুলি পার্থক্য মোকাবেলা করতে পারে।

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

  • সমস্ত স্ট্রিংগুলি ইউটিএফ -8 এ সঞ্চয় করুন।

  • যদি আপনি দীর্ঘমেয়াদী এক্সটেনসিবিলিটি সম্পর্কে যত্নশীল হন তবে সমস্ত পূর্ণসংখ্যাকে একটি চলক-দৈর্ঘ্যের আকারে সংরক্ষণ করুন।

  • চেকসামগুলি দুর্দান্ত কারণ এটি পাঠককে অবিলম্বে অবৈধ ডেটা বাতিল করতে দেয়, সম্ভাব্যভাবে ফাইলের অংশগুলিতে প্রবেশের পরিবর্তে বিভ্রান্তিকর ফলাফল তৈরি করতে পারে।


আমাকে উপলব্ধি করার জন্য +1 যে আমি একমাত্র ব্যক্তি নন যিনি ভাবেন যে জসন কোনও ফর্ম্যাটের ঘৃণা।
রাবারডাক

জসনের জন্য ঘৃণা কেন? ফর্ম্যাটটি সনাক্ত করতে একটি পরিচিত স্থানে একটি পরিচিত স্ট্রিং রাখুন। সমস্যা সমাধান.
এসবেভ স্কোভ পেদারসেন

এটি নিখুঁত নয়, তবে এটি জাভাস্ক্রিপ্টের সাথে নির্বিঘ্নে কাজ করে, এক্সএমএল এবং আরও ছোট আকারের তুলনায় দ্রুত এবং এখনও মানব পাঠযোগ্য।
কোরিলুলু

1
"জেএসএন-এর জন্য ঘৃণা কেন?" মানব-পঠনযোগ্য মন্তব্য, ইউনিকোডের ছাঁটাছুটি, এবং এমন কোনও অদ্ভুত বাক্য গঠন যা আমাকে কীগুলি উদ্ধৃত করার জন্য প্রয়োজন তার মধ্যে কখনও শ্বেতক্ষেত্র নেই। প্লাস জিনিসগুলিকে প্রসারিত করতে না পারা স্বাভাবিক অক্ষমতা কারণ কেউই নামস্পেসিংয়ের কথা চিন্তা করেনি ... আপনি যখন এটির সমাধান করেন তখন আপনি এমন কিছু শেষ করেন যা XML এর চেয়েও খারাপ দেখায় প্রথমে, কিসের জন্য, কিছু কোণ এড়ানোর সুবিধা all বন্ধনী?
ট্রেজকাজ

হ্যাঁ, তবে প্রোগ্রামিং সহ সমস্ত কিছুর মতোই কাজের জন্য সঠিক সরঞ্জামটি ব্যবহার করুন। এমন অ্যাপ্লিকেশন রয়েছে যেখানে এক্সএমএল জেএসএনের চেয়ে ভাল এবং বিপরীতে।
কোরিলুলু

4

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

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

অবশ্যই অন্য অপশনটি হ'ল এক্সএমএল বা জেএসএন। বাইনারি ভারী সামগ্রীর জন্য অগত্যা সর্বোত্তম নয়, সহজ এবং মানব পাঠযোগ্য ... দীর্ঘমেয়াদী বাস্তবতার জন্য একটি বড় প্লাস।


আমি প্রোটোবুফ -নেট (কোড. google.com/p/protobuf-net ) ব্যবহার করে সিরিয়ালাইজ করছি যা এক্সটেনসিবল। তবে আপনার পয়েন্টগুলি বৈধ, তবে আমি মনে করি না যে এগুলি ফাইল ফরম্যাটের কোনও পদ্ধতি যা এর থেকে প্রতিরোধী।
কোরিলুলু

হ্যাঁ ... কেন আমি কখনও কখনও বলি যে আপনাকে কেবল নিজের হাতটি নোংরা করতে হবে এবং ম্যানুয়ালি ডেটা লেখা এবং লোড হওয়া ক্রমটি পরিচালনা করতে হবে।
গ্র্যান্ডমাস্টারবি

আমি যে অ্যাপ্লিকেশনটি তৈরি করছি তা গতিশীল হওয়ার পক্ষে অনেক বেশি এবং এর মতো কোনও কিছুর জন্য অনেক বেশি মান রয়েছে।
কোরিলুলু

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

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

1

আমিও চাই ভালবাসেন আমি ছাড়া বছর আরো অভিজ্ঞতা ব্যক্তিদের কাছ থেকে এই প্রশ্নের উত্তর শুনতে।

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

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

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


এই উত্তরটি প্রশ্নটির দিকে খুব বেশি নির্দেশিত নয়, এই সাইটটি একটি আলোচনার বোর্ড হিসাবে নয়, বরং এটি অনাকাঙ্ক্ষিত প্রশ্নোত্তরের জন্য। আপনার উত্তরে কিছু বৈধ পয়েন্ট রয়েছে যা প্রশ্নকারীর দৃষ্টিভঙ্গি কেন ভাল বা সঠিক নয় সে সম্পর্কে একটি পরামর্শ দেওয়ার পক্ষে যুক্তিযুক্ত হতে পারে তবে এটি খুব বেশি কেন্দ্রীভূত নয়। আপনার উত্তরটি আরও কিছুটা প্রশ্নের উপরে केन्द्रিত করুন, ধন্যবাদ!
জিমি হোফা

@ জিমিহোফা যদিও আমার উত্তরটি ওপি-র প্রশ্নকে সমর্থন করেছে, আমি এটা পরিষ্কার করে দিয়েছিলাম যে আমি একটি এক্সএমএল আধা-কাঠামোগত পদ্ধতির পরামর্শ দিচ্ছিলাম .. তবে আমি কী বলতে চাইছি তা আমি দেখতে পাচ্ছি
এ্যালান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.