工具类

StringBuffer & StringBuilder

StringBuffer、StringBuilder 和 String 一样,也用来代表字符串。String 类是不可变类,任何对 String 的改变都 会引发新的 String 对象的生成;StringBuffer 则是可变类,任何对它所指代的字符串的改变都不会产生新的对象。

StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。StringBuffer 支持并发操作,线性安全的,适合多线程中使用。StringBuilder 不支持并发操作,线性不安全的,不适合多线程中使用。新引入的 StringBuilder 类不是线程安全的,但其在单线程中的性能比 StringBuffer 高。由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。

StringBuffer sb = new StringBuffer(BASEINFO);  
for (int i = 0; i < COUNT; i++) {  
    sb = sb.append("miss");  
}

StringBuilder sb = new StringBuilder(BASEINFO);  
long starttime = System.currentTimeMillis();  
for (int i = 0; i < COUNT; i++) {  
    sb = sb.append("miss");  
}

StringBuffer

以下是 StringBuffer 类支持的主要方法:

序号 方法描述
1 public StringBuffer append(String s) 将指定的字符串追加到此字符序列
2 public StringBuffer reverse() 将此字符序列用其反转形式取代
3 public delete(int start, int end) 移除此序列的子字符串中的字符
4 public insert(int offset, int i) 将 int 参数的字符串表示形式插入此序列中
5 replace(int start, int end, String str) 使用给定 String 中的字符替换此序列的子字符串中的字符

MD5

MD5 是一种广泛使用的加密哈希函数,可产生 128 位的哈希。

MessageDigest

我们在 java.security.MessageDigest 类中具有哈希功能。这个想法是首先使用要用作 Singleton 参数的算法实例化 MessageDigest:

MessageDigest.getInstance(String Algorithm)
@Test
public void givenPassword_whenHashing_thenVerifying()
  throws NoSuchAlgorithmException {
    String hash = "35454B055CC325EA1AF2126E27707052";
    String password = "ILoveJava";
         
    MessageDigest md = MessageDigest.getInstance("MD5");
    md.update(password.getBytes());
    byte[] digest = md.digest();
    String myHash = DatatypeConverter
      .printHexBinary(digest).toUpperCase();
         
    assertThat(myHash.equals(hash)).isTrue();

    // 针对文件处理
    String filename = "src/test/resources/test_md5.txt";
    md.update(Files.readAllBytes(Paths.get(filename)));
}

Apache Commons

@Test
public void givenPassword_whenHashingUsingCommons_thenVerifying()  {
    String hash = "35454B055CC325EA1AF2126E27707052";
    String password = "ILoveJava";

    String md5Hex = DigestUtils
      .md5Hex(password).toUpperCase();

    assertThat(md5Hex.equals(hash)).isTrue();
}

Guava

@Test
public void givenFile_whenChecksumUsingGuava_thenVerifying()
  throws IOException {
    String filename = "src/test/resources/test_md5.txt";
    String checksum = "5EB63BBBE01EEED093CB22BB8F5ACDC3";

    HashCode hash = com.google.common.io.Files
      .hash(new File(filename), Hashing.md5());
    String myChecksum = hash.toString()
      .toUpperCase();

    assertThat(myChecksum.equals(checksum)).isTrue();
}
上一页
下一页