मैं जावा में एक नौसिखिया हूं और मैं एक फाइल पर मैक गणना करने की कोशिश कर रहा हूं। अब फ़ाइल के आकार को रनटाइम पर नहीं जाना जाता है, इसलिए मैं बस फाइल में सभी फाइलों को लोड नहीं कर सकता। इसलिए मैंने कोड लिखा ताकि यह बिट्स (इस मामले में 4k) में पढ़े। मेरा मुद्दा यह है कि मैंने पूरी फ़ाइल को स्मृति में लोड करने का प्रयास किया ताकि यह देखने के लिए कि दोनों विधियां एक ही हैश उत्पन्न करती हैं या नहीं। हालांकि वे अलग अलग हैशमेमोरी में जावा रीडिंग फाइल और मेमोरी को कैसे उड़ाया जाए
यहाँ बिट कोड द्वारा सा उत्पादन हो रहे हैं:
FileInputStream fis = new FileInputStream("sbs.dat");
byte[] file = new byte[4096];
m = Mac.getInstance("HmacSHA1");
int i=fis.read(file);
m.init(key);
while (i != -1)
{
m.update(file);
i=fis.read(file);
}
mac = m.doFinal();
और यहाँ एक बार दृष्टिकोण बिल्कुल है: एक ही हैश
File f = new File("sbs.dat");
long size = f.length();
byte[] file = new byte[(int) size];
fis.read(file);
m = Mac.getInstance("HmacSHA1");
m.init(key);
m.update(file);
mac = m.doFinal();
वे दोनों का उत्पादन नहीं करना चाहिए ?
प्रश्न हालांकि अधिक सामान्य है। क्या पहला कोड फाइल को मेमोरी में टुकड़ों में लोड करने का सही तरीका है और जो कुछ भी हम चक्र के दौरान करना चाहते हैं? (सॉकेट भेजें, एक फाइल सिफर, इत्यादि ...)। यह प्रश्न उपयोगी है क्योंकि मैंने देखा है कि हर ट्यूटोरियल सिर्फ एक ही समय में सब कुछ लोड करता है ...
अपडेट: कार्य :- डी। क्या यह दृष्टिकोण एक सॉकेट के माध्यम से टुकड़ों में फ़ाइल को सही तरीके से भेज देगा?
रवींद्र। मैं बेवकूफ की तरह महसूस करता हूं, मैं पूरी तरह से भूल गया कि मैक कक्षाओं में 3 अपडेट विधियां हैं। फिर भी, मैं अभी भी कुछ आसान के आसपास घंटों खो देता। इसे आज़माएं, लेकिन यह सही लगता है। – ptguy