工具类

StringBuffer & StringBuilder

StringBuffer、StringBuilderString一样,也用来代表字符串。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();
}
上一页
下一页