unsafe
क्षेत्र में जाने के बिना, "बड़ी" फ़ाइलों (जो टेक्स्ट या बाइनरी हो सकता है) पढ़ने का सबसे प्रभावी सामान्य उद्देश्य तरीका क्या है? मैं आश्चर्यचकित था कि जब मैंने "वेब में भाग को बड़ी फाइल पढ़ने के लिए" वेब खोज की थी तो कितने प्रासंगिक परिणाम थे।भाग में बड़ी फ़ाइल पढ़ने के लिए सबसे प्रभावी तरीका
उदाहरण के लिए, अपने प्रयोग के मामलों में से एक rust-crypto
का उपयोग कर एक फ़ाइल के लिए एक MD5 चेकसम गणना करने के लिए है (Md5
मॉड्यूल आपको &[u8]
हिस्सा iteratively जोड़ सकते हैं)।
const CAP: usize = 1024 * 128;
let mut file = try!(File::open("my.file"));
let mut reader = BufReader::with_capacity(CAP, file);
loop {
let length = {
let buffer = try!(reader.fill_buf());
// do stuff with buffer here
buffer.len()
};
if length == 0 { break; }
reader.consume(length);
}
उत्तर के लिए धन्यवाद! मैंने सोचा कि 'BufReader' मेरे लिए उपयोगी था क्योंकि जब मैंने पाठक के अंत तक पहुंचा तो मेरे लिए बफर का आकार बदल गया, लेकिन मुझे अभी एहसास हुआ कि यह बहुत छोटा है ... –
* क्योंकि यह बफर का आकार बदल गया * - मुझे संदेह है कि यह बफर का आकार बदलता है, लेकिन स्लाइस को संभवतः बाइट्स पढ़ने की संख्या को प्रतिबिंबित करने के लिए छोटा कर दिया जाता है। लेकिन आप सही हैं कि 'रीड :: रीड' का रिटर्न वैल्यू आपको बताता है कि बफर कितना मान्य है। इसका उपयोग करने के लिए ** बहुत महत्वपूर्ण ** है, अन्यथा आप हार्टबलेड जैसी समस्या में आ सकते हैं जहां पुरानी सामग्री के साथ एक बफर का पुन: उपयोग किया जाता है! यह 'BufReader' का उपयोग करने का एक अच्छा कारण हो सकता है। – Shepmaster
क्षमा करें, आप सही हैं, मेरा मतलब है "बफर की लंबाई कम करें"। –