博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ddpush 学习之路 3 StringUtil.java
阅读量:2348 次
发布时间:2019-05-10

本文共 5705 字,大约阅读时间需要 19 分钟。

我们来看ddpush的第二个类。这次也是选择一个工具类来解析。我们先尽量把边缘的工具类、Bean、这些边缘的东西研究一遍。然后再看核心的一些类。尽量确保我们看核心类的时候。核心类里涉及到的一些其他类、函数 我们都已经研究过了。这样。在我们看核心类的时候。才能比较容易明白核心类得操作结果。

好了下面来看第ddpush的二个类。StringUtil.java 同样的。先上类代码以及注释。然后是具体的使用以及结果的展示。

public class StringUtil {
/** * 检测传入的String类型参数是否为 null * 如果传入的参数为null就返回 ""(空字符串) * 否则就返回参数本身 * 作用:防止字符串出现 空指针 异常 * */ public static String checkBlankString(String param) { if (param == null) { return ""; } return param; } /** * MD5加密 * */ public static String md5(String encryptStr) throws Exception { MessageDigest md = MessageDigest.getInstance("MD5"); md.update(encryptStr.getBytes("UTF-8")); byte[] digest = md.digest(); StringBuffer md5 = new StringBuffer(); for (int i = 0; i < digest.length; i++) { md5.append(Character.forDigit((digest[i] & 0xF0) >> 4, 16)); md5.append(Character.forDigit((digest[i] & 0xF), 16)); } encryptStr = md5.toString(); return encryptStr; } /** * SHA1加密 * */ public static String sha1(String encryptStr) throws Exception { MessageDigest md = MessageDigest.getInstance("SHA1"); md.update(encryptStr.getBytes("UTF-8")); byte[] digest = md.digest(); StringBuffer sha1 = new StringBuffer(); for (int i = 0; i < digest.length; i++) { sha1.append(Character.forDigit((digest[i] & 0xF0) >> 4, 16)); sha1.append(Character.forDigit((digest[i] & 0xF), 16)); } encryptStr = sha1.toString(); return encryptStr; } /** * md5加密字符串。返回加密后的byte[] * */ public static byte[] md5Byte(String encryptStr) throws Exception { MessageDigest md = MessageDigest.getInstance("MD5"); md.update(encryptStr.getBytes("UTF-8")); return md.digest(); } /** * SHA1加密字符串。返回加密后的byte[] * */ public static byte[] sha1Byte(String encryptStr) throws Exception { MessageDigest md = MessageDigest.getInstance("SHA1"); md.update(encryptStr.getBytes("UTF-8")); return md.digest(); } /** * 获得UUID(使用JDK生成的UIID) 并将系统生成的默认的UUID中间的 “-” 去掉 并返回这个处理过的UUID * */ public static String genUUIDHexString(){ return UUID.randomUUID().toString().replaceAll("-", ""); } /** * 将16进制字符串解析成 UUID 并返回 * */ public static UUID parseUUIDFromHexString(String hexUUID) throws Exception{ byte[] data = hexStringToByteArray(hexUUID); long msb = 0; long lsb = 0; for (int i=0; i<8; i++) msb = (msb << 8) | (data[i] & 0xff); for (int i=8; i<16; i++) lsb = (lsb << 8) | (data[i] & 0xff); return new java.util.UUID(msb,lsb); } /** * 将传入的值转换成 16 进制数字 并返回 * */ private static char convertDigit(int value) { value &= 0x0f; if (value >= 10) return ((char) (value - 10 + 'a')); else return ((char) (value + '0')); } /** * 将一个16进制字符串转换成字节数组 并返回 * */ public static byte[] hexStringToByteArray(String s) { int len = s.length(); byte[] data = new byte[len / 2]; for (int i = 0; i < len; i += 2) { data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i+1), 16)); } return data; } /** * 将字节数组转换成一个可打印的格式包含一个十六进制数字字符的字符串(两个字节) * */ public static String convert(final byte bytes[]) { StringBuffer sb = new StringBuffer(bytes.length * 2); for (int i = 0; i < bytes.length; i++) { sb.append(convertDigit((int) (bytes[i] >> 4))); sb.append(convertDigit((int) (bytes[i] & 0x0f))); } return (sb.toString()); } /** * 将字节数组的 一部分 转换成一个可打印的格式包含一个十六进制数字字符的字符串(两个字节) * */ public static String convert(final byte bytes[],int pos, int len) { StringBuffer sb = new StringBuffer(len * 2); for (int i = pos; i < pos+len; i++) { sb.append(convertDigit((int) (bytes[i] >> 4))); sb.append(convertDigit((int) (bytes[i] & 0x0f))); } return (sb.toString()); }}

以上就是我对这个 StringUtil.java 这个工具类的理解以及添加的注释。这个类大概的作用有 获取UUID、 UUID的解析、 MD5 加密、 SHA1 加密、10进制16进制的转换、16进制字符串和byte[]数组之间的转换。

这个类也就这些东西。关于加密、UUID之类的。就再这个类里面。

好了。下面我们来看看这个类的基本使用。

try {    //MD5加密字符串    String brok1nMd5 = md5("brok1n");    //SHA1加密字符串    String brok1nSha1 = sha1("brok1n");    //MD5 byte[]    byte[] baseMd5 = md5Byte("brok1n");    System.out.println("brok1n md5:" + brok1nMd5);    System.out.println("brok1n sha1:" + brok1nSha1);    System.out.println(convert(baseMd5));    //获取UUID    System.out.println("UUID:" + genUUIDHexString());    //获取UUID    String uuidstr = genUUIDHexString();    //用parseUUIDFormHexString(String hexStr) 将 上面获取的 uuid 转换成 UUID 对象    UUID uid = parseUUIDFromHexString(uuidstr);             System.out.println("----------");    System.out.println("原始UUID \t\t\t\t:" + uuidstr);    System.out.println("parseUUIDFormHexString之后的UUID\t\t:" + uid.toString());    System.out.println("parseUUIDFormHexString之后的UUID去除 “-” \t:" + uid.toString().replace("-", ""));    System.out.println("---------");    //将byte[]数组 转换成 16进制字符串    String convertResult = convert(md5Byte("123456"));    System.out.println("123456 convert之后的字符串:" + convertResult);    //将16进制字符串转换成 byte[]    byte[] bta = hexStringToByteArray(md5("123456"));    //将 byte[] 数组 转换成 16进制字符串    String sbat = convert(bta);    System.out.println("16进制转换后的字符串:" + sbat);} catch (Exception e) {    // TODO Auto-generated catch block    e.printStackTrace();}

结果为

测试结果

经过上面的理解注释和简单的运用。大概明白了这个类的基本作用。UUID MD5 SHA1 进制转换

好了。这就是解析 ddpush 的第二个工具类 StringUtil.java

by brok1n 20150316

你可能感兴趣的文章
Android实现超链接和跑马灯
查看>>
实现二叉树先序、中序、后序遍历
查看>>
Socket客户端服务器连接
查看>>
简单字符设备驱动程序的操作步骤
查看>>
视频压缩:I帧、P帧、B帧
查看>>
视频编解码基础一
查看>>
视频编码学习二
查看>>
视频处理
查看>>
Python的安装教程
查看>>
谈谈码率、帧率、分辨率和清晰度
查看>>
OSI参考模型通信举例
查看>>
Vue.js 入门学习(一)
查看>>
Vue.js入门学习(二)实例、数据绑定、计算属性
查看>>
Vue.js入门学习(三) Class与Style绑定
查看>>
Vue.js入门学习(五)方法与事件处理器、表单控件绑定
查看>>
项目:Vue.js高仿饿了吗外卖APP(一)
查看>>
javascript中一些相对位置
查看>>
vue高仿饿了么课程项目--布局篇学习笔记
查看>>
es6 javascript的Iterator 和 for...of 循环
查看>>
Javascript中的shift() 、unshift() 和 pop()、push()区别
查看>>