سؤال

أود أن أكون قادرًا على القيام بوصول عشوائي إلى ملف Gzipped. يمكنني تحمل بعض المعالجة المسبقة عليها (على سبيل المثال ، بناء نوع من الفهرس) ، شريطة أن تكون نتيجة المعالجة المسبقة أصغر بكثير من الملف نفسه.

اي نصيحه؟

كانت أفكاري:

  • اختراق تنفيذ GZIP الحالي وتسلسل حالة فك ضغط كل ، على سبيل المثال ، 1 ميغابايت من البيانات المضغوطة. ثم لإمكانية الوصول العشوائي ، قم بتهرب من حالة إلغاء الضغط وقراءة من حدود Megabyte. يبدو هذا صعبًا ، خاصة وأنني أعمل مع Java ولم أتمكن من العثور على تنفيذ Pure-Java Gzip :(
  • أعد ضغط الملف في أجزاء من 1 ميجابايت وافعل نفس الشيء أعلاه. هذا له عيب مضاعفة مساحة القرص المطلوبة.
  • اكتب محللًا بسيطًا لتنسيق GZIP الذي لا يقوم بأي ضغوط واكتشاف وحدود حظر الفهارس فقط (إذا كانت هناك أي كتل: لم أقرأ بعد وصف تنسيق GZIP)
هل كانت مفيدة؟

المحلول

الق نظرة في هذا الرابط (مثال رمز C).

/* zran.c -- example of zlib/gzip stream indexing and random access
...

GZIP هو مجرد zlib مع مظروف.

نصائح أخرى

ال BGZF تم تطوير تنسيق الملف ، متوافق مع GZIP من قبل علماء الأحياء.

(...) ميزة BGZF على GZIP التقليدية هي أن BGZF يسمح بالسعي دون الحاجة إلى مسح من خلال الملف بأكمله حتى الموقف الذي يتم البحث عنه.

في http://picard.svn.sourceforge.net/viewvc/picard/trunk/src/java/net/sf/samtools/util/ ، إلقاء نظرة على blockcompressedoututputstream و blockcompressedInputStream.java

سؤال مهم. لا أفهم لماذا سيؤدي خيارك الثاني (إعادة ضغط الملف في قطع) إلى مضاعفة مساحة القرص. يبدو لي أنه سيكون هو نفسه ، أقل كمية صغيرة من النفقات العامة. إذا كان لديك سيطرة على قطعة الضغط ، فإن ذلك يبدو وكأنه الفكرة الصحيحة.

ربما ما تعنيه هو أنه ليس لديك سيطرة على المدخلات ، وبالتالي فإنها ستضاعف.

إذا كان بإمكانك القيام بذلك ، فأنا أتخيل تصميمه على أنه فئة مضغوطة تستخدم كمتجر دعم ، وهي سلسلة من النقطات البالغة 1 ميجابايت. عند القراءة ، ينتقل البحث () على الدفق إلى النقطة المناسبة وإلغاء الضغط. A read () بعد نهاية النقطة من شأنها أن تتسبب في فتح الدفق النقطة التالية.

ملاحظة: تم وصف GZIP في IETF RFC 1952, ، لكنه يستخدم انحراف لتنسيق الضغط. لن يكون هناك سبب لاستخدام تفصيل GZIP إذا قمت بتطبيق فئة CompressedFilestream هذه كما تخيلت ذلك.

FWIW: لقد طورت أداة سطر الأوامر عليها زلب Zran.C مصدر الرمز الذي يخلق فهارس ملفات GZIP: https://github.com/circulosmeos/gztool

يمكنه حتى إنشاء فهرس لملف GZIP الذي لا يزال متزايدًا (على سبيل المثال ، سجل تم إنشاؤه بواسطة RSysLog مباشرة بتنسيق GZIP) وبالتالي تقليل الممارسة إلى الصفر وقت إنشاء الفهرس. انظر -S (الإشراف) اختيار.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top