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

📄 totorrentfilehasher.java

📁 java 文件下载器。可自定义
💻 JAVA
字号:
// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi space 
// Source File Name:   TOTorrentFileHasher.java

package org.gudy.azureus2.core3.torrent.impl;

import java.io.*;
import java.util.Vector;
import org.gudy.azureus2.core3.torrent.TOTorrentException;
import org.gudy.azureus2.core3.util.ED2KHasher;
import org.gudy.azureus2.core3.util.SHA1Hasher;

// Referenced classes of package org.gudy.azureus2.core3.torrent.impl:
//			TOTorrentFileHasherListener

public class TOTorrentFileHasher
{

	protected boolean do_other_per_file_hash;
	protected int piece_length;
	protected Vector pieces;
	protected byte buffer[];
	protected int buffer_pos;
	protected SHA1Hasher overall_sha1_hash;
	protected ED2KHasher overall_ed2k_hash;
	protected byte sha1_digest[];
	protected byte ed2k_digest[];
	protected byte per_file_sha1_digest[];
	protected byte per_file_ed2k_digest[];
	protected TOTorrentFileHasherListener listener;
	protected boolean cancelled;

	protected TOTorrentFileHasher(boolean _do_other_overall_hashes, boolean _do_other_per_file_hash, int _piece_length, TOTorrentFileHasherListener _listener)
	{
		pieces = new Vector();
		if (_do_other_overall_hashes)
		{
			overall_sha1_hash = new SHA1Hasher();
			overall_ed2k_hash = new ED2KHasher();
		}
		do_other_per_file_hash = _do_other_per_file_hash;
		piece_length = _piece_length;
		listener = _listener;
		buffer = new byte[piece_length];
	}

	long add(File _file)
		throws TOTorrentException
	{
		long file_length;
		InputStream is;
		Exception exception;
		file_length = 0L;
		is = null;
		SHA1Hasher sha1_hash = null;
		ED2KHasher ed2k_hash = null;
		try
		{
			if (do_other_per_file_hash)
			{
				sha1_hash = new SHA1Hasher();
				ed2k_hash = new ED2KHasher();
			}
			is = new BufferedInputStream(new FileInputStream(_file), 0x10000);
			do
			{
				if (cancelled)
					throw new TOTorrentException("TOTorrentCreate: operation cancelled", 9);
				int len = is.read(buffer, buffer_pos, piece_length - buffer_pos);
				if (len <= 0)
					break;
				if (do_other_per_file_hash)
				{
					sha1_hash.update(buffer, buffer_pos, len);
					ed2k_hash.update(buffer, buffer_pos, len);
				}
				file_length += len;
				buffer_pos += len;
				if (buffer_pos == piece_length)
				{
					byte hash[] = (new SHA1Hasher()).calculateHash(buffer);
					if (overall_sha1_hash != null)
					{
						overall_sha1_hash.update(buffer);
						overall_ed2k_hash.update(buffer);
					}
					pieces.add(hash);
					if (listener != null)
						listener.pieceHashed(pieces.size());
					buffer_pos = 0;
				}
			} while (true);
			if (do_other_per_file_hash)
			{
				per_file_sha1_digest = sha1_hash.getDigest();
				per_file_ed2k_digest = ed2k_hash.getDigest();
			}
		}
		catch (TOTorrentException e)
		{
			throw e;
		}
		catch (Throwable e)
		{
			throw new TOTorrentException((new StringBuilder()).append("TOTorrentFileHasher: file read fails '").append(e.toString()).append("'").toString(), 4);
		}
		finally
		{
			if (is == null) goto _L0; else goto _L0
		}
		if (is != null)
			try
			{
				is.close();
			}
			catch (Exception e) { }
		break MISSING_BLOCK_LABEL_361;
		try
		{
			is.close();
		}
		catch (Exception e) { }
		throw exception;
		return file_length;
	}

	protected byte[] getPerFileSHA1Digest()
	{
		return per_file_sha1_digest;
	}

	protected byte[] getPerFileED2KDigest()
	{
		return per_file_ed2k_digest;
	}

	protected byte[][] getPieces()
		throws TOTorrentException
	{
		byte res[][];
		if (buffer_pos > 0)
		{
			byte rem[] = new byte[buffer_pos];
			System.arraycopy(buffer, 0, rem, 0, buffer_pos);
			pieces.addElement((new SHA1Hasher()).calculateHash(rem));
			if (overall_sha1_hash != null)
			{
				overall_sha1_hash.update(rem);
				overall_ed2k_hash.update(rem);
			}
			if (listener != null)
				listener.pieceHashed(pieces.size());
			buffer_pos = 0;
		}
		if (overall_sha1_hash != null && sha1_digest == null)
		{
			sha1_digest = overall_sha1_hash.getDigest();
			ed2k_digest = overall_ed2k_hash.getDigest();
		}
		res = new byte[pieces.size()][];
		pieces.copyInto(res);
		return res;
		Throwable e;
		e;
		throw new TOTorrentException((new StringBuilder()).append("TOTorrentFileHasher: file read fails '").append(e.toString()).append("'").toString(), 4);
	}

	protected byte[] getED2KDigest()
		throws TOTorrentException
	{
		if (ed2k_digest == null)
			getPieces();
		return ed2k_digest;
	}

	protected byte[] getSHA1Digest()
		throws TOTorrentException
	{
		if (sha1_digest == null)
			getPieces();
		return sha1_digest;
	}

	protected void cancel()
	{
		cancelled = true;
	}
}

⌨️ 快捷键说明

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