您的位置:首页 > 其它

常用类型转换方法工具类

2016-06-05 12:51 288 查看
此文章是基于  搭建Jquery+SpringMVC+Spring+Hibernate+MySQL平台

功能:十六进制字符串与字节数组互转;字符转字节;Blob类型转字节数组;阿拉伯数字转中文小写;

  利用反射机制,将源对象转为目标对象;

类型转换类:ConvertUtil.java

package com.ims.common;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.lang.reflect.Method;
import java.sql.Blob;

/**
* 常用类型转换方法工具类
*/
public class ConvertUtil {

/**
*  字节数组转换为十六进制字符串.
*  @param src
*  @return 十六进制字符串
*/
public static String bytesToHexString(byte[] src){
StringBuilder stringBuilder = new StringBuilder("");
if (src == null || src.length <= 0) {
return null;
}
for (int i = 0; i < src.length; i++) {
int v = src[i] & 0xFF;
String hv = Integer.toHexString(v);
if (hv.length() < 2) {
stringBuilder.append(0);
}
stringBuilder.append(hv);
}
return stringBuilder.toString();
}

/**
*  十六进制字符串转换为字节数组
*  @param hexString 十六进制字符串
*  @return
*/
public static byte[] hexStringToBytes(String hexString) {
if (hexString == null || hexString.equals("")) {
return null;
}
hexString = hexString.toUpperCase();
int length = hexString.length() / 2;
char[] hexChars = hexString.toCharArray();
byte[] d = new byte[length];
for (int i = 0; i < length; i++) {
int pos = i * 2;
d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
}
return d;
}

/**
* 字符转换为字节
* @param c 字符
* @return
*/
private static byte charToByte(char c) {
return (byte) "0123456789ABCDEF".indexOf(c);
}

/**
* Blob类型转换为字节数组
* @param blob
* @return
*/
public static byte[] blobToBytes(Blob blob) {
BufferedInputStream is = null;
try {
is = new BufferedInputStream(blob.getBinaryStream());
byte[] bytes = new byte[(int) blob.length()];
int len = bytes.length;
int offset = 0;
int read = 0;

while (offset < len && (read = is.read(bytes, offset, len - offset)) >= 0) {
offset += read;
}
return bytes;
} catch (Exception e) {
return null;
} finally {
try {
is.close();
is = null;
} catch (IOException e) {
return null;
}
}
}

/**
* 阿拉伯数字转中文小写
* @param si 阿拉伯数字
* @return 中文小写字符串
*/
public static String transition(String si){
String []aa={"","十","百","千","万","十万","百万","千万","亿","十亿"};
String []bb={"一","二","三","四","五","六","七","八","九"};
char[] ch=si.toCharArray();
int maxindex=ch.length;
// 字符的转换
String result = "";
// 两位数的特殊转换
if(maxindex==2){
for(int i=maxindex-1,j=0;i>=0;i--,j++){
if(ch[j]!=48){
if(j==0&&ch[j]==49){
result += aa[i];
}else{
result += bb[ch[j]-49]+aa[i];
}
}
}
// 其他位数的特殊转换,使用的是int类型最大的位数为十亿
}else{
for(int i=maxindex-1,j=0;i>=0;i--,j++){
if(ch[j]!=48){
result += bb[ch[j]-49]+aa[i];
}
}
}

return result;
}

/**
* 利用反射机制,将源对象转换为目标对象,属性名一致,且源对象有get方法,目标对象有set方法
* @param src 源对象
* @param target 目标对象
* @return 赋值后的目标对象
*/
public static Object autoGetterAndSetter(Object src, Object target) {
Method[] sms = src.getClass().getMethods();     // 原始类方法srcMethod
Method[] tms = target.getClass().getMethods();     // 目标类方法targetMethod
for (Method sm : sms) {
if (sm.getName().startsWith("get")) {        // 原始类的 getter
String attrName = sm.getName().substring(3);// 属性
for (Method tm : tms) {// 遍历目标方法
if (("set" + attrName).equals(tm.getName())) {// 执行目标类的指定attrName的setter
try{
if(!(null==sm.invoke(src))){
tm.invoke(target, sm.invoke(src));
}
}catch(Exception e){
continue;
}
}
}
}
}
return target;
}
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: