فشرده سازی

این سند برای روش زیر اعمال می شود: Update API (v4) : gefListUpdates.fetch .

در مورد فشرده سازی

فشرده سازی یکی از ویژگی های کلیدی API های مرور ایمن (v4) است. فشرده سازی به طور قابل توجهی نیاز به پهنای باند را کاهش می دهد، که به ویژه، اما نه منحصرا، برای دستگاه های تلفن همراه مرتبط است. سرور مرور ایمن در حال حاضر از فشرده سازی Rice پشتیبانی می کند. ممکن است در آینده روش های فشرده سازی اضافی اضافه شود.

فشرده سازی با استفاده از قسمت supportedCompressions و CompressionType تنظیم می شود. مشتریان باید از انواع فشرده سازی RICE و RAW استفاده کنند. وقتی نوع فشرده‌سازی تنظیم نشده باشد، «مرور ایمن» از نوع COMPRESSION_TYPE_UNSPECIFIED استفاده می‌کند (فشرده‌سازی RAW جایگزین خواهد شد).

سرور مرور ایمن همچنین از فشرده‌سازی استاندارد HTTP برای فشرده‌سازی بیشتر پاسخ‌ها، صرف نظر از نوع فشرده‌سازی انتخابی، استفاده می‌کند، تا زمانی که کلاینت هدر فشرده‌سازی HTTP را درست تنظیم کند (به مقاله ویکی‌پدیا فشرده‌سازی HTTP مراجعه کنید).

فشرده سازی برنج

همانطور که اشاره شد، سرور مرور ایمن در حال حاضر از فشرده‌سازی Rice پشتیبانی می‌کند (برای بحث کامل در مورد کدگذاری Golomb-Rice به مقاله ویکی‌پدیا کدگذاری Golomb مراجعه کنید).

فشرده سازی/فشرده سازی

شی RiceDeltaEncoding نشان دهنده داده های رمزگذاری شده Rice-Golomb است و برای ارسال شاخص های حذف فشرده یا پیشوندهای هش فشرده 4 بایتی استفاده می شود. (پیوندهای هش بیش از 4 بایت فشرده نمی شوند و به جای آن در قالب خام ارائه می شوند.)

برای حذف شاخص‌ها، فهرست شاخص‌ها به ترتیب صعودی مرتب شده و سپس با استفاده از رمزگذاری RICE کد دلتا می‌شود. برای اضافات، پیشوندهای هش 4 بایتی مجدداً به عنوان uint32s کمی اندیان تفسیر می شوند، به ترتیب صعودی مرتب می شوند و سپس با استفاده از رمزگذاری RICE کد دلتا می شوند. به تفاوت فرمت هش بین فشرده سازی RICE و RAW توجه کنید: هش های خام بایت های واژگانی مرتب شده اند، در حالی که هش های Rice به ترتیب صعودی (بعد از فشرده سازی) uint32s مرتب شده اند.

یعنی لیست اعداد صحیح [1، 5، 7، 13] به صورت 1 (اولین مقدار) و دلتاها [4، 2، 6] کدگذاری می شوند.

اولین مقدار در فیلد firstValue ذخیره می شود و دلتاها با استفاده از رمزگذار Golomb-Rice کدگذاری می شوند. پارامتر Rice k (به زیر مراجعه کنید) در riceParameter ذخیره می شود. فیلد numEntries شامل تعداد دلتاهای رمزگذاری شده در رمزگذار Rice است (در مثال بالا 3 تا، نه 4). فیلد encodedData حاوی دلتاهای رمزگذاری شده واقعی است.

رمزگذار/رمزگشا

در رمزگذار/رمزگشا Rice هر دلتا n به صورت q و r که در آن n = (q<<k) + r (یا، n = q * (2**k) + r) کدگذاری می شود. k ثابت و پارامتر رمزگذار/رمزگشا Rice است. مقادیر q و r در جریان بیت با استفاده از طرح‌های رمزگذاری مختلف کدگذاری می‌شوند.

ضریب q در کدگذاری یکنواخت و به دنبال آن 0 رمزگذاری می شود. یعنی 3 به صورت 1110، 4 به عنوان 11110 و 7 به صورت 11111110 کد می شود. ضریب q ابتدا رمزگشایی می شود.

باقی مانده r با استفاده از رمزگذاری باینری کوتاه شده کدگذاری می شود. فقط کم‌اهمیت‌ترین k بیت‌های r نوشته می‌شوند (و بنابراین خوانده می‌شوند) از جریان بیت. باقیمانده r پس از رمزگشایی q رمزگشایی می شود.

رمزگذار/رمزگشا بیت

رمزگذار Rice به یک رمزگذار/رمزگشای بیت متکی است که در آن تک بیت ها می توانند به رمزگذار بیت اضافه شوند. یعنی کدگذاری یک ضریب q که می تواند تنها دو بیت باشد.

رمزگذار بیت لیستی از بایت های (8 بیتی) است. بیت ها از کمترین بیت مهم در اولین بایت تا بالاترین بیت مهم در اولین بایت تنظیم می شوند. اگر یک بایت تمام بیت های خود را از قبل تنظیم کرده باشد، یک بایت جدید (با مقدار اولیه صفر) به انتهای لیست بایت اضافه می شود. اگر آخرین بایت به طور کامل استفاده نشود، بالاترین بیت های مهم آن صفر می شود. مثال:

بیت اضافه شده است BitEncoder پس از افزودن بیت ها
[]
0 [00000000]
1 [00000010]
1 [00000110]
1,0,1 [00101110]
0,0,0 [00101110, 00000000]
1،1،0 [00101110, 00000110]