From 7673f0869badef70056f499d03e125de7cc74bff Mon Sep 17 00:00:00 2001 From: orbiter Date: Tue, 6 Feb 2007 16:01:03 +0000 Subject: [PATCH] minor enhancements git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@3344 6c8d7289-2bf4-0310-a012-ef5d649a1542 --- source/de/anomic/server/serverCodings.java | 68 +++++++++++++--------- source/de/anomic/yacy/yacySeed.java | 8 +++ 2 files changed, 48 insertions(+), 28 deletions(-) diff --git a/source/de/anomic/server/serverCodings.java b/source/de/anomic/server/serverCodings.java index 5b97d6504..50198165c 100644 --- a/source/de/anomic/server/serverCodings.java +++ b/source/de/anomic/server/serverCodings.java @@ -67,47 +67,59 @@ public final class serverCodings { return s; } + public static String encodeOctal(byte[] in) { + if (in == null) return ""; + StringBuffer result = new StringBuffer(in.length * 8 / 3); + for (int i = 0; i < in.length; i++) { + if ((0Xff & (int) in[i]) < 8) result.append('0'); + result.append(Integer.toOctalString(0Xff & (int) in[i])); + } + return new String(result); + } + public static String encodeHex(byte[] in) { - if (in == null) return ""; - String result = ""; - for (int i = 0; i < in.length; i++) - result = result + (((0Xff & (int) in[i]) < 16) ? "0" : "") + Integer.toHexString(0Xff & (int) in[i]); - return result; + if (in == null) return ""; + StringBuffer result = new StringBuffer(in.length * 2); + for (int i = 0; i < in.length; i++) { + if ((0Xff & (int) in[i]) < 16) result.append('0'); + result.append(Integer.toHexString(0Xff & (int) in[i])); + } + return new String(result); } public static byte[] decodeHex(String hex) { - byte[] result = new byte[hex.length() / 2]; - for (int i = 0; i < result.length; i++) { - result[i] = (byte) (16 * Integer.parseInt(hex.charAt(i * 2) + "", 16) + Integer.parseInt(hex.charAt(i * 2 + 1) + "", 16)); - } - return result; + byte[] result = new byte[hex.length() / 2]; + for (int i = 0; i < result.length; i++) { + result[i] = (byte) (16 * Integer.parseInt(hex.charAt(i * 2) + "", 16) + Integer.parseInt(hex.charAt(i * 2 + 1) + "", 16)); + } + return result; } public static String encodeMD5Hex(String key) { - // generate a hex representation from the md5 of a string - return encodeHex(encodeMD5Raw(key)); + // generate a hex representation from the md5 of a string + return encodeHex(encodeMD5Raw(key)); } public static String encodeMD5Hex(File file) { - // generate a hex representation from the md5 of a file - return encodeHex(encodeMD5Raw(file)); + // generate a hex representation from the md5 of a file + return encodeHex(encodeMD5Raw(file)); } public static String encodeMD5Hex(byte[] b) { - // generate a hex representation from the md5 of a byte-array - return encodeHex(encodeMD5Raw(b)); + // generate a hex representation from the md5 of a byte-array + return encodeHex(encodeMD5Raw(b)); } public static byte[] encodeMD5Raw(String key) { - try { - MessageDigest digest = MessageDigest.getInstance("MD5"); - digest.reset(); - digest.update(key.getBytes()); - return digest.digest(); - } catch (java.security.NoSuchAlgorithmException e) { - System.out.println("Internal Error at md5:" + e.getMessage()); - } - return null; + try { + MessageDigest digest = MessageDigest.getInstance("MD5"); + digest.reset(); + digest.update(key.getBytes()); + return digest.digest(); + } catch (java.security.NoSuchAlgorithmException e) { + System.out.println("Internal Error at md5:" + e.getMessage()); + } + return null; } public static byte[] encodeMD5Raw(File file) { @@ -181,7 +193,7 @@ public final class serverCodings { } public static String map2string(Map m, String separator, boolean braces) { - final StringBuffer buf = new StringBuffer(512); + final StringBuffer buf = new StringBuffer(20 * m.size()); if (braces) { buf.append("{"); } final Iterator i = m.entrySet().iterator(); while (i.hasNext()) { @@ -192,7 +204,7 @@ public final class serverCodings { } if (buf.length() > 1) { buf.setLength(buf.length() - 1); } // remove last separator if (braces) { buf.append("}"); } - return buf.toString(); + return new String(buf); } public static Set string2set(String string, String separator) { @@ -220,7 +232,7 @@ public final class serverCodings { if (hasNext) buf.append(separator); } if (braces) buf.append("}"); - return buf.toString(); + return new String(buf); } public static void main(String[] s) { diff --git a/source/de/anomic/yacy/yacySeed.java b/source/de/anomic/yacy/yacySeed.java index 17b58cefb..a5e97e38c 100644 --- a/source/de/anomic/yacy/yacySeed.java +++ b/source/de/anomic/yacy/yacySeed.java @@ -312,6 +312,14 @@ public class yacySeed { dna.put(yacySeed.URL_IN, Integer.toString(Integer.parseInt(v) + count)); } + // 12 * 6 bit = 72 bit = 24 characters octal-hash + // octal hashes are used for cache-dumps that are DHT-ready + // cause: the natural order of octal hashes are the same as the b64-order of b64Hashes + // a hexhash cannot be used in such cases, and b64Hashes are not appropriate for file names + public static String b64Hash2octalHash(String b64Hash) { + return serverCodings.encodeOctal(kelondroBase64Order.enhancedCoder.decode(b64Hash)); + } + // 12 * 6 bit = 72 bit = 18 characters hex-hash public static String b64Hash2hexHash(String b64Hash) { // the hash string represents 12 * 6 bit = 72 bits. This is too much for a long integer.