2009-09-30 11 views
9

कहें कि मेरे पास एक bzip2 फ़ाइल (5GB से अधिक) है, और मैं केवल ब्लॉक #x को डिकंप्रेस करना चाहता हूं, क्योंकि मेरा डेटा है (ब्लॉक हर बार अलग होता है)। यह मैं कैसे करूंगा?केवल एक विशिष्ट bzip2 ब्लॉक

मैंने सभी ब्लॉकों के सूचकांक बनाने के बारे में सोचा था, फिर फ़ाइल से मुझे आवश्यक ब्लॉक को काट दें और इसमें bzip2recover लागू करें।

मैंने एक समय में 1 एमबी को संपीड़ित करने के बारे में भी सोचा, फिर इसे फ़ाइल में जोड़ना (और स्थान रिकॉर्ड करना), और जब मुझे इसकी ज़रूरत होती है तो फ़ाइल को पकड़ लेना, लेकिन मैं मूल bzip2 फ़ाइल को बरकरार रखना चाहता हूं।

मेरी पसंदीदा भाषा रुबी है, लेकिन किसी भी भाषा का समाधान मेरे द्वारा ठीक है (जब तक मैं सिद्धांत को समझता हूं)।

उत्तर

6

एक http://bitbucket.org/james_taylor/seek-bzip2

ले लो स्रोत नहीं है, यह संकलन। परीक्षण करने के लिए

./seek-bzip2 32 < bzip_compressed.bz2 

साथ

भागो।

एकमात्र परम आश्चर्यजनक ब्लॉक हेडर का थोड़ा विस्थापन है। बाइनरी फ़ाइल में "31 41 59 26 53 59" हेक्स स्ट्रिंग खोजने के साथ आप इसे प्राप्त कर सकते हैं। यह गलत था। ब्लॉक स्टार्ट को बाइट सीमा से गठबंधन नहीं किया जा सकता है, इसलिए आपको "31 41 59 26 53 59" हेक्स स्ट्रिंग की हर संभव बिट शिफ्ट की खोज करनी चाहिए, क्योंकि यह bzip2recover में किया जाता है - http://www.bzip.org/1.0.3/html/recovering.html

32 "BZh1 का छोटा आकार है "शीर्षलेख जहां 1" 1 "से" 9 "(क्लासिक bzip2 में) से कोई भी अंक हो सकता है - यह सैकड़ों केबी (सटीक नहीं) में एक (असंपीड़ित) ब्लॉक आकार है।

+0

एसआईसी! ब्लॉक स्टार्ट बाइट सीमा नहीं हो सकता है :(बिट विस्थापन और मूल डेटा ब्लॉक आकारों के आकार प्राप्त करने के लिए "seek-bzip2" में एक bzip-table प्रोग्राम शामिल है। – osgx

+0

दुर्भाग्य से, "bzip-table" लगभग समान है वास्तविक डिकंप्रेसिंग के रूप में गति :(। यह लगभग पूर्ण डिकंप्रेस चक्र करता है, लेकिन सीआरसी की जांच न करें। – osgx

+0

इसके अलावा, जेफ गिलक्रिस्ट द्वारा पीबीजीआईपी 2 की तरह समानांतर बिज़िप्स पर नज़र डालें। समानांतर डिकंप्रेशन में इसे ब्लॉक हेडर खोजने की आवश्यकता है। कोड: http://www.google.com/codesearch/p?hl=hi#calSvFpbfuI/trunk/trunk/demo/pbzip2-1.0.2/pbzip2.cpp&q=pbzip2&sa=N&cd=2&ct=rc&l=3 'producer_decompress' फ़ंक्शन – osgx

2

यह सच है कि bzip-table डिकंप्रेसिंग के रूप में लगभग धीमा है लेकिन निश्चित रूप से आपको केवल एक बार ऐसा करना है और आप किसी फ़ैशन में आउटपुट को इंडेक्स के रूप में उपयोग करने के लिए स्टोर कर सकते हैं। यह मेरी जरूरत के लिए एकदम सही है लेकिन हो सकता है कि सभी को क्या चाहिए।

हालांकि मुझे विंडोज़ पर संकलन करने में थोड़ी मदद की आवश्यकता थी।

+0

msys – osgx

+0

के साथ mingw आज़माएं http://sourceforge.net/projects/mingw/files/Automated%20MinGW%20Installer/mingw-get-inst/mingw-get-inst-20110316/mingw-get-inst-20110316.exe/download – osgx

संबंधित मुद्दे