সঙ্কোচন

এই নথিটি নিম্নলিখিত পদ্ধতিতে প্রযোজ্য: আপডেট এপিআই (v4) : ਧਮਕੀলিস্টআপডেটস.ফেচ

কম্প্রেশন সম্পর্কে

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

সমর্থিত কম্প্রেশন ফিল্ড এবং কম্প্রেশন টাইপ ব্যবহার করে কম্প্রেশন সেট করা হয়েছে। ক্লায়েন্টদের RICE এবং RAW কম্প্রেশন প্রকার ব্যবহার করা উচিত। কম্প্রেশন টাইপ সেট না থাকলে নিরাপদ ব্রাউজিং COMPRESSION_TYPE_UNSPECIFIED টাইপ ব্যবহার করে (RAW কম্প্রেশন প্রতিস্থাপিত হবে)।

ক্লায়েন্ট সঠিক HTTP কম্প্রেশন শিরোনাম (উইকিপিডিয়া নিবন্ধ HTTP কম্প্রেশন দেখুন) সেট করা নির্বিশেষে, নিরাপদ ব্রাউজিং সার্ভারটি প্রতিক্রিয়াগুলিকে আরও সংকুচিত করতে স্ট্যান্ডার্ড HTTP কম্প্রেশন ব্যবহার করবে।

চালের সংকোচন

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

কম্প্রেশন/ডিকম্প্রেশন

রাইসডেল্টা এনকোডিং অবজেক্টটি রাইস-গোলম্ব এনকোড করা ডেটা উপস্থাপন করে এবং সংকুচিত অপসারণ সূচক বা সংকুচিত 4-বাইট হ্যাশ উপসর্গ পাঠাতে ব্যবহৃত হয়। (4 বাইটের বেশি লম্বা হ্যাশ উপসর্গগুলিকে সংকুচিত করা হবে না এবং পরিবর্তে কাঁচা বিন্যাসে পরিবেশন করা হবে।)

অপসারণ সূচকের জন্য, সূচকের তালিকা ক্রমবর্ধমান ক্রমে সাজানো হয় এবং তারপর RICE এনকোডিং ব্যবহার করে ডেল্টা এনকোড করা হয়। সংযোজনের জন্য, 4-বাইট হ্যাশ উপসর্গগুলিকে লিটল-এন্ডিয়ান uint32 হিসাবে পুনঃব্যাখ্যা করা হয়, আরোহী ক্রমে সাজানো হয়, এবং তারপর RICE এনকোডিং ব্যবহার করে ডেল্টা এনকোড করা হয়। RICE কম্প্রেশন এবং RAW-এর মধ্যে হ্যাশ ফরম্যাটের পার্থক্যটি লক্ষ্য করুন: কাঁচা হ্যাশগুলি লেক্সিকোগ্রাফিকভাবে সাজানো বাইট, যেখানে রাইস হ্যাশগুলি আরোহী ক্রমে (ডিকম্প্রেশনের পরে) সাজানো হয়।

অর্থাৎ, পূর্ণসংখ্যার তালিকা [1, 5, 7, 13] 1 (প্রথম মান) এবং ডেল্টা [4, 2, 6] হিসাবে এনকোড করা হবে।

প্রথম মানটি firstValue ক্ষেত্রে সংরক্ষণ করা হয় এবং ডেল্টাগুলি একটি Golomb-Rice এনকোডার ব্যবহার করে এনকোড করা হয়। রাইস প্যারামিটার k (নীচে দেখুন) রাইস প্যারামিটারে সংরক্ষণ করা হয়। numEntries ফিল্ডে রাইস এনকোডারে এনকোড করা ডেল্টার সংখ্যা রয়েছে (উপরের আমাদের উদাহরণে 3টি, 4 নয়)। encodedData ফিল্ডে প্রকৃত এনকোডেড ডেল্টা থাকে।

এনকোডার/ডিকোডার

রাইস এনকোডার/ডিকোডারে প্রতিটি ডেল্টা n কে q এবং r হিসাবে এনকোড করা হয় যেখানে n = (q<<k) + r (বা, n = q * (2**k) + r)। k হল একটি ধ্রুবক এবং রাইস এনকোডার/ডিকোডারের একটি প্যারামিটার। q এবং r-এর মানগুলি বিভিন্ন এনকোডিং স্কিম ব্যবহার করে বিট স্ট্রীমে এনকোড করা হয়।

ভাগফল q এনকোড করা হয় unary কোডিং এর পরে 0। অর্থাৎ, 3 কে 1110 হিসাবে, 4 কে 11110 হিসাবে এবং 7 কে 11111110 হিসাবে এনকোড করা হবে। ভাগফল q প্রথমে ডিকোড করা হয়।

অবশিষ্ট r ছেঁটে বাইনারি এনকোডিং ব্যবহার করে এনকোড করা হয়। বিট স্ট্রীম থেকে শুধুমাত্র r-এর সর্বনিম্ন উল্লেখযোগ্য k বিট লেখা হয় (এবং তাই পড়া হয়)। q ডিকোড করার পরে অবশিষ্ট r ডিকোড করা হয়।

বিট এনকোডার/ডিকোডার

রাইস এনকোডার একটি বিট এনকোডার/ডিকোডারের উপর নির্ভর করে যেখানে একক বিটগুলি বিট এনকোডারে যুক্ত করা যেতে পারে; অর্থাৎ, একটি ভাগফল q এনকোড করতে যা মাত্র দুই বিট দীর্ঘ হতে পারে।

বিট এনকোডার হল (8-বিট) বাইটের একটি তালিকা। বিটগুলি প্রথম বাইটের সর্বনিম্ন উল্লেখযোগ্য বিট থেকে প্রথম বাইটে সর্বোচ্চ উল্লেখযোগ্য বিট পর্যন্ত সেট করা হয়। যদি একটি বাইটের সমস্ত বিট ইতিমধ্যেই সেট করা থাকে, বাইট তালিকার শেষে একটি নতুন বাইট (শুরুতে শুরু করা) যুক্ত করা হয়। যদি শেষ বাইটটি সম্পূর্ণরূপে ব্যবহৃত না হয়, তবে এর সর্বোচ্চ উল্লেখযোগ্য বিটগুলি শূন্যে সেট করা হয়। উদাহরণ:

বিট যোগ করা হয়েছে BitEncoder বিট যোগ করার পর
[]
0 [00000000]
1 [00000010]
1 [00000110]
1,0,1 [00101110]
0,0,0 [00101110, 00000000]
1,1,0 [00101110, 00000110]