কোনও ফাইলের শুরুতে এমন কিছু লেখা যা আপনি কেবল শেষে জানেন


9

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

আমি যখন পুরো ইবিএমএল উপাদানটি মেমরিতে রাখতে পারি, তারপরে এটিকে উত্পন্ন করা সহজ কারণ আমি ফিরে যেতে পারি এবং প্রতিটি এলিমেন্টের দৈর্ঘ্য পূরণ করতে পারি তার পরে আমি জানি যে সেই দৈর্ঘ্যটি কী। সমস্যাটি হ'ল আমি যখন পুরো উপাদানটিকে মেমরির মধ্যে রাখতে পারি না তখন করণীয়। আমি যে বিকল্পগুলি দেখছি তা হ'ল:

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

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


1
/ sccs এইভাবে কাজ করে: এটি লেখার পরে ফাইলের শুরুতে সমস্ত বাইটের চেকসাম লেখেন। Unixes উপর Unixes এ কাজ করে মহান যে প্রয়োজন ফাইল অপারেশন atomically কি করতে পারেন (যেমন সোলারিস) এবং অদ্ভুত বিক্ষিপ্ত বিষয় ঘটায় যে, যেমন লিনাক্স ব্যবহার করতে পারবেন না যে
মশা

উত্তর:


2

আপনি যদি জানেন না যে আপনার পেডলোডটি কতদিন থাকবে, তবে এটি খুব কমই উদ্বেগের কারণ হতে পারে এমনকি আপনি যদি অবস্থানটি মনে না করতে পারেন এবং পরে দৈর্ঘ্যটি ব্যাকফিল করেন:

কেবল "অজানা আকার" নোট করুন।

এই বৈশিষ্ট্যটি EBML- উপাদানগুলির সমন্বিত পেলোডের উপর নির্ভর করে এবং যদিও নীচের উপাদানটি বৈধ শিশু-উপাদান নয়।

আপনি যদি চান তবে পরে আপনার সুবিধামত ফলস্বরূপ EBML অফলাইনটি আপনি যেভাবে চান তেমনভাবে আখ্যায়িত করতে পারেন, উদাহরণস্বরূপ "অজানা মাপ, ন্যূনতম আকার" বা "ন্যূনতম আকার, অজানা আকারগুলি এড়ানো"।


বিস্তারিত জানতে matroska.org এ EBML আরএফসি খসড়া দেখুন।


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

আপনার সঠিক ডিটিডি প্রয়োজন বা আপনি সত্যই ইবিএমএল ডিকোড করতে পারবেন না। ঠিক আছে, সমস্ত অজানা উপাদানগুলি আকারযুক্ত হলে আপনি সেগুলি এড়িয়ে যেতে পারেন, তবে এটি কি যথেষ্ট? আপনি যে কোনও EBML অফলাইনে রাখতে চান তা পোস্ট-প্রসেস করুন it
উত্সাহক

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

0

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

সিক্যুয়েন্সগুলির জন্য আপনি সর্বোচ্চ ফাইলের গণনা এবং পরবর্তী ফাইলটিতে থাকা "স্ট্রিম" নির্ধারণ করার চেষ্টা করতে পারেন

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

সাধারণভাবে খুব বড় উপাদানগুলির সংখ্যা হ্রাস করার চেষ্টা করুন


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

আপনার ধারণাটি কার্যকর হবে তবে আমি স্কিমার সীমাবদ্ধ না করে বরং এমন একটি সিস্টেম তৈরি করব যা বড় উপাদানগুলিকে পরিচালনা করতে পারে যাতে এটি বড় উপাদানগুলি এড়ায়।
pscheidler

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

0

KISS এবং YAGNI I
# 1 বিকল্পটি চয়ন করুন এবং এটি যদি আসল সমস্যা হয়ে যায় - তবে কেবল তার উপর পুনরাবৃত্তি করুন।

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

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