java - How to read and calculate hash of file on the internet -
i have url of file on internet. need calculate sha1 hash, , read file each line. know how this, read file twice isn't solution.
how can more effectively?
here code:
url url = new url(url); urlconnection urlconnection = url.openconnection(); urlconnection.setconnecttimeout(1000); urlconnection.setreadtimeout(1000); logger.error(urlconnection.getcontent() + " "); inputstream = urlconnection.getinputstream(); // first reading of file is: int i; file file = new file("nameoffile"); bufferedinputstream bis = new bufferedinputstream(is); bufferedoutputstream bos = new bufferedoutputstream(new fileoutputstream(file.getname())); while ((i = bis.read()) != -1) { bos.write(i); } bos.flush(); bis.close(); sha1(file); // second reading of file is: bufferedreader reader = new bufferedreader(new inputstreamreader(is)); string line; while ((line = reader.readline()) != null) { // } protected byte[] sha1(final file file) throws exception { if (file == null || !file.exists()) { return null; } final messagedigest messagedigest = messagedigest.getinstance(sha1); inputstream = new bufferedinputstream(new fileinputstream(file)); try { final byte[] buffer = new byte[1024]; (int read = 0; (read = is.read(buffer)) != -1;) { messagedigest.update(buffer, 0, read); } } { ioutils.closequietly(is); } return messagedigest.digest(); }
if pass through digestinputstream, it'll messagedigest , still usable inputstream.
digestinputstream dis = new digestinputstream(is, messagedigest.getinstance(sha1)); bufferedinputstream bis = new bufferedinputstream(dis); bufferedoutputstream bos = new bufferedoutputstream( new fileoutputstream(file.getname())); while ((i = bis.read()) != -1) { bos.write(i); } bos.close(); return dis.getmessagedigest().digest();
Comments
Post a Comment