⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 md4filehasher.java

📁 JMule是一个基于Java开发
💻 JAVA
字号:
/* *  JMule - Java file sharing client *  Copyright (C) 2007-2008 JMule team ( jmule@jmule.org / http://jmule.org ) * *  Any parts of this program derived from other projects, or contributed *  by third-party developers are copyrighted by their respective authors. * *  This program is free software; you can redistribute it and/or *  modify it under the terms of the GNU General Public License *  as published by the Free Software Foundation; either version 2 *  of the License, or (at your option) any later version. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU General Public License for more details. * *  You should have received a copy of the GNU General Public License *  along with this program; if not, write to the Free Software *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. * */package org.jmule.core.utils;import static org.jmule.core.edonkey.E2DKConstants.PARTSIZE;import java.nio.ByteBuffer;import java.nio.ByteOrder;import java.nio.channels.FileChannel;import org.jmule.core.edonkey.impl.FileHash;import org.jmule.core.edonkey.impl.PartHashSet;/** *  * @author binary256 * @version $$Revision: 1.1 $$ * Last changed by $$Author: javajox $$ on $$Date: 2008/07/31 16:44:34 $$ */public class MD4FileHasher {		public static PartHashSet calcHashSets(FileChannel fileChannel) {	    try {	    	fileChannel.position(0);            int i;            int c;            long position = 0L;            ByteBuffer hashset;            MD4 msgDigest = new MD4();            ByteBuffer bb = ByteBuffer.allocateDirect(8192).order(ByteOrder.LITTLE_ENDIAN);            ByteBuffer di = ByteBuffer.allocate(16).order(ByteOrder.LITTLE_ENDIAN);                        c = (int) ((fileChannel.size() + PARTSIZE - 1) / PARTSIZE);                        // we will need space for c Parts            hashset = ByteBuffer.allocate(16 * (c>0?c:1)).order(ByteOrder.LITTLE_ENDIAN);            for (i = 1; i < c; i++) {                while (position <= (i * PARTSIZE - bb.capacity())) {                    position+=fileChannel.read(bb, position);                    bb.flip();                    msgDigest.update(bb);                    bb.rewind();                }                            if (position < (i * PARTSIZE)) {                    bb.limit((int) ((i * PARTSIZE) - position));                    position+=fileChannel.read(bb, position);                    bb.flip();                    msgDigest.update(bb);                    bb.rewind();                }                 hashset.limit(16 * i);                 //update hashset - add a hash                 msgDigest.finalDigest(hashset);            }            if (c > 0) {            	                while (position < (fileChannel.size())) {                    position+=fileChannel.read(bb, position);                    bb.flip();                    msgDigest.update(bb);                    bb.rewind();                }                hashset.limit(16 * i);            }            msgDigest.finalDigest(hashset);                       hashset.flip();            if (c > 1) {                msgDigest.update(hashset);                msgDigest.finalDigest(di);            } else {                di.put(hashset);            }                        di.rewind();            hashset.rewind();            //hashes             byte[][] hashes = new byte[(c!=1)?(c + 1):1][16];            di.get(hashes[0]);            for (int j = 1; j < hashes.length; j++) {                hashset.get(hashes[j]);            }            hashset.rewind();                                   PartHashSet fileHashSet = new PartHashSet(new FileHash(hashes[0]));            for(int j=1; j < hashes.length;j++){            	fileHashSet.add(hashes[j]);            }            return fileHashSet;                    } catch (Throwable e) {e.printStackTrace();}		return null;			}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -