मैं ज़िप संग्रह में मुट्ठी फ़ाइल से पहले पांच बाइट्स लेना चाहता हूं। मैं विसंपीड़न के लिए ज़िप संग्रह पैकेज का उपयोग करें:ज़िप संग्रह से ढीले बाइटस्ट्रिंग को ढेर ओवरफ्लो
import qualified Data.ByteString.Lazy as L
import Data.Maybe
import System.Environment (getArgs)
import Codec.Archive.Zip
main = do
f:_ <- getArgs
print . L.take 5 . fromEntry . head . zEntries . toArchive =<< L.readFile f
इस कोड को छोटे अभिलेखागार के लिए काम करता है, लेकिन मैं लोगों के साथ बड़ा ढेर अतिप्रवाह मिला है। उदाहरण के लिए:
./zip-arch test.zip +RTS -p -hy -M100M
इस archive के लिए इस heap profile
यही कारण है, कि एक समस्या का कोई संकेत नहीं है। मैं खुद को देख लूंगा। –
@DanielFischer अजीब, लेकिन मुझे यह त्रुटि संदेश मिला है: ढेर थका हुआ; वर्तमान अधिकतम ढेर आकार 104857600 बाइट्स (100 एमबी) है; इसे बढ़ाने के लिए '+ RTS -M 'का उपयोग करें। –
tymmym
@tymmym: 'fromEntry' पैकेज "digest" से CRC32 चेकसम का उपयोग करता है। यह zcib.h में crc32 का आह्वान करके crc32 करता है, यह कुछ स्मृति का उपभोग कर सकता है? मुझे यकीन नहीं है। – Nybble