2011-04-06 13 views
11

मुझे एंड्रॉइड पर SHA-1 प्रदर्शन के साथ कोई समस्या है। सी # में मुझे लगभग 3s में हैश की गणना मिलती है, एंड्रॉइड के लिए समान गणना लगभग 75 होती है। मुझे लगता है कि समस्या फाइल से ऑपरेशन पढ़ने में है, लेकिन मुझे यकीन नहीं है कि प्रदर्शन में सुधार कैसे किया जाए।एंड्रॉइड, फ़ाइल से SHA-1 हैश की गणना, सबसे तेज़ एल्गोरिदम

यहां मेरी हैश पीढ़ी विधि है।

private static String getSHA1FromFileContent(String filename) 
    { 

     try 
     { 
      MessageDigest digest = MessageDigest.getInstance("SHA-1"); 
      //byte[] buffer = new byte[65536]; //created at start. 
      InputStream fis = new FileInputStream(filename); 
      int n = 0; 
      while (n != -1) 
      { 
       n = fis.read(buffer); 
       if (n > 0) 
       { 
        digest.update(buffer, 0, n); 
       } 
      } 
      byte[] digestResult = digest.digest(); 
      return asHex(digestResult); 
     } 
     catch (Exception e) 
     { 
      return null; 
     } 
    } 

कोई विचार मैं प्रदर्शन में सुधार कैसे कर सकता हूं?

+0

आपके द्वारा पढ़ी जा रही फ़ाइल का आकार क्या है? – SirDarius

+0

'asHex (..)' विधि के बिना अपना कोड चलाने का प्रयास करें (बस बाइट [] वापस करें)। –

+0

मैं 6 एमबी फ़ाइल का उपयोग कर रहा हूं, asHex (..) को हटाने में मदद नहीं मिली है:/ –

उत्तर

4

मैंने इसे अपने एसजीएस (i9000) पर परीक्षण किया और 10.1 एमबी फ़ाइल के लिए हैश उत्पन्न करने के लिए 0.806s लिया।

केवल अंतर यह है कि मेरे कोड में मैं पर पाया FileInputStream और हेक्स रूपांतरण पुस्तकालय के अलावा BufferedInputStream का उपयोग कर रहा है:

http://apachejava.blogspot.com/2011/02/hexconversions-convert-string-byte-byte.html

इसके अलावा, मैं सुझाव है कि आप अपनी फ़ाइल इनपुट स्ट्रीम बंद अंत में खंड

+2

यह लिंक 11/10/15 के रूप में टूट गया है। – keithbhunter

+0

लिंक 2017 में टूट गया है। – jpros

1

यदि मैं आप थे तो मैं use the JNI like this guy did और उस तरह से गति प्राप्त करूंगा। यह वास्तव में सी इंटरफ़ेस के लिए बनाया गया था।

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

  • कोई संबंधित समस्या नहीं^_^