मैं अपने कोड को प्रोफाइल कर रहा था जो एक बाइनरी फ़ाइल लोड कर रहा था। लोड समय लगभग 15 सेकंड था।जावा में BufferedInputStream के लिए इष्टतम आकार की तलाश
मेरा अधिकांश लोड समय बाइनरी डेटा लोड करने वाले तरीकों से आ रहा था।
मैं अपने DataInputStream बनाने के लिए निम्नलिखित कोड था:
is = new DataInputStream(
new GZIPInputStream(
new FileInputStream("file.bin")));
और मैं यह करने के लिए इसे बदल: के बाद मैं इस छोटा सा संशोधन कोड डालने के लिए 15 सेकंड से चला गया किया
is = new DataInputStream(
new BufferedInputStream(
new GZIPInputStream(
new FileInputStream("file.bin"))));
तो 4.
लेकिन फिर मैंने पाया कि BufferedInputStream में दो रचनाकार हैं। अन्य कन्स्ट्रक्टर आपको बफर आकार को स्पष्ट रूप से परिभाषित करने देता है।
मैं दो प्रश्न हैं:
- क्या आकार BufferedInputStream में चुना है और इसके आदर्श है? यदि नहीं, तो मैं बफर के लिए इष्टतम आकार कैसे प्राप्त कर सकता हूं? क्या मुझे एक त्वरित कोड लिखना चाहिए जो बाइनरी खोज करता है?
- क्या यह सबसे अच्छा तरीका है जिसे मैं BufferedInputStream का उपयोग कर सकता हूं? मैं मूल रूप से GZIPInputStream के भीतर था लेकिन लापरवाही लाभ था। मुझे लगता है कि कोड अब क्या कर रहा है हर बार फ़ाइल बफर भरने की जरूरत है, जीजेआईपी इनपुट स्ट्रीम एक्स बाइट्स के माध्यम से जाता है और डीकोड करता है (जहां एक्स बफर का आकार होता है)। क्या यह पूरी तरह से GZIPInputStream को छोड़ने लायक होगा? यह निश्चित रूप से जरूरी नहीं है, लेकिन इसका उपयोग करते समय मेरी फ़ाइल का आकार नाटकीय रूप से कम हो गया है।
मेरा सुझाव है कि डिस्क से पढ़ने पर आप GZIPInputStream के लिए 64K का बफर आज़माएं। मैं 1 एमबी का उपयोग करता हूं, जो आवश्यक से अधिक होने की संभावना है। ;) –