📄 totorrentfilehasher.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 + -