package com.guang.netty.transfer.util;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.WeakHashMap;
/**
* 有关 <code>Class</code> 处理的工具类。
*
* <p>
* 这个类中的每个方法都可以“安全”地处理 <code>null</code> ,而不会抛出
* <code>NullPointerException</code>。
* </p>
*
* @author <a href="mailto:xuc@iphonele.com">saga67</a>
* @version create on 2011-5-17 下午03:31:11
*/
public class ClassUtil {
/*
* ==========================================================================
* ==
*/
/* 常量和singleton。 */
/*
* ==========================================================================
* ==
*/
/** 资源文件的分隔符: <code>'/'</code>。 */
public static final char RESOURCE_SEPARATOR_CHAR = '/';
/** Java类名的分隔符: <code>'.'</code>。 */
public static final char PACKAGE_SEPARATOR_CHAR = '.';
/** Java类名的分隔符: <code>"."</code>。 */
public static final String PACKAGE_SEPARATOR = String
.valueOf(PACKAGE_SEPARATOR_CHAR);
/** 内联类的分隔符: <code>'$'</code>。 */
public static final char INNER_CLASS_SEPARATOR_CHAR = '$';
/** 内联类的分隔符: <code>"$"</code>。 */
public static final String INNER_CLASS_SEPARATOR = String
.valueOf(INNER_CLASS_SEPARATOR_CHAR);
/** 所有类的信息表,包括父类, 接口, 数组的维数等信息。 */
private static Map<Class<?>, TypeInfo> TYPE_MAP = Collections
.synchronizedMap(new WeakHashMap<Class<?>, TypeInfo>());
private static final Map<Class<?>, Class<?>> primitiveWrapperTypeMap = new HashMap<Class<?>, Class<?>>(
8);
private static final Map<Class<?>, Class<?>> primitiveTypeToWrapperMap = new HashMap<Class<?>, Class<?>>(
8);
private ClassUtil() {
}
static {
primitiveWrapperTypeMap.put(Boolean.class, boolean.class);
primitiveWrapperTypeMap.put(Byte.class, byte.class);
primitiveWrapperTypeMap.put(Character.class, char.class);
primitiveWrapperTypeMap.put(Double.class, double.class);
primitiveWrapperTypeMap.put(Float.class, float.class);
primitiveWrapperTypeMap.put(Integer.class, int.class);
primitiveWrapperTypeMap.put(Long.class, long.class);
primitiveWrapperTypeMap.put(Short.class, short.class);
for (Map.Entry<Class<?>, Class<?>> entry : primitiveWrapperTypeMap
.entrySet()) {
primitiveTypeToWrapperMap.put(entry.getValue(), entry.getKey());
}
}
/*
* ==========================================================================
* ==
*/
/* 取得类名和package名的方法。 */
/*
* ==========================================================================
* ==
*/
/**
* 取得对象所属的类的直观类名。
*
* <p>
* 相当于 <code>object.getClass().getName()</code> ,但不同的是,该方法用更直观的方式显示数组类型。 例如:
*
* <pre>
* int[].class.getName() = "[I" ClassUtil.getClassName(int[].class) = "int[]"
*
* Integer[][].class.getName() = "[[Ljava.lang.Integer;" ClassUtil.getClassName(Integer[][].class) = "java.lang.Integer[][]"
* </pre>
*
* </p>
*
* <p>
* 对于非数组的类型,该方法等效于 <code>Class.getName()</code> 方法。
* </p>
*
* <p>
* 注意,该方法所返回的数组类名只能用于显示给人看,不能用于 <code>Class.forName</code> 操作。
* </p>
*
* @param object
* 要显示类名的对象
*
* @return 用于显示的直观类名,如果原类名为空或非法,则返回 <code>null</code>
*/
public static String getClassNameForObject(Object object) {
if (object == null) {
return null;
}
return getClassName(object.getClass().getName(), true);
}
/**
* 取得直观的类名。
*
* <p>
* 相当于 <code>clazz.getName()</code> ,但不同的是,该方法用更直观的方式显示数组类型。 例如:
*
* <pre>
* int[].class.getName() = "[I" ClassUtil.getClassName(int[].class) = "int[]"
*
* Integer[][].class.getName() = "[[Ljava.lang.Integer;" ClassUtil.getClassName(Integer[][].class) = "java.lang.Integer[][]"
* </pre>
*
* </p>
*
* <p>
* 对于非数组的类型,该方法等效于 <code>Class.getName()</code> 方法。
* </p>
*
* <p>
* 注意,该方法所返回的数组类名只能用于显示给人看,不能用于 <code>Class.forName</code> 操作。
* </p>
*
* @param clazz
* 要显示类名的类
*
* @return 用于显示的直观类名,如果原始类为 <code>null</code> ,则返回 <code>null</code>
*/
public static String getClassName(Class<?> clazz) {
if (clazz == null) {
return null;
}
return getClassName(clazz.getName(), true);
}
/**
* 取得直观的类名。
*
* <p>
* <code>className</code> 必须是从 <code>clazz.getName()</code>
* 所返回的合法类名。该方法用更直观的方式显示数组类型。 例如:
*
* <pre>
* int[].class.getName() = "[I" ClassUtil.getClassName(int[].class) = "int[]"
*
* Integer[][].class.getName() = "[[Ljava.lang.Integer;" ClassUtil.getClassName(Integer[][].class) = "java.lang.Integer[][]"
* </pre>
*
* </p>
*
* <p>
* 对于非数组的类型,该方法等效于 <code>Class.getName()</code> 方法。
* </p>
*
* <p>
* 注意,该方法所返回的数组类名只能用于显示给人看,不能用于 <code>Class.forName</code> 操作。
* </p>
*
* @param className
* 要显示的类名
*
* @return 用于显示的直观类名,如果原类名为 <code>null</code> ,则返回 <code>null</code>
* ,如果原类名是非法的,则返回原类名
*/
public static String getClassName(String className) {
return getClassName(className, true);
}
/**
* 取得直观的类名。
*
* @param className
* 类名
* @param processInnerClass
* 是否将内联类分隔符 <code>'$'</code> 转换成 <code>'.'</code>
*
* @return 直观的类名,或 <code>null</code>
*/
private static String getClassName(String className,
boolean processInnerClass) {
if (StringUtil.isEmpty(className)) {
return className;
}
if (processInnerClass) {
className = className.replace(INNER_CLASS_SEPARATOR_CHAR,
PACKAGE_SEPARATOR_CHAR);
}
int length = className.length();
int dimension = 0;
// 取得数组的维数,如果不是数组,维数为0
for (int i = 0; i < length; i++, dimension++) {
if (className.charAt(i) != '[') {
break;
}
}
// 如果不是数组,则直接返回
if (dimension == 0) {
return className;
}
// 确保类名合法
if (length <= dimension) {
return className; // 非法类名
}
// 处理数组
StringBuilder componentTypeName = new StringBuilder();
switch (className.charAt(dimension)) {
case 'Z':
componentTypeName.append("boolean");
break;
case 'B':
componentTypeName.append("byte");
break;
case 'C':
componentTypeName.append("char");
break;
case 'D':
componentTypeName.append("double");
break;
case 'F':
componentTypeName.append("float");
break;
case 'I':
componentTypeName.append("int");
break;
case 'J':
componentTypeName.append("long");
break;
case 'S':
componentTypeName.append("short");
break;
case 'L':
if ((className.charAt(length - 1) != ';')
|| (length <= (dimension + 2))) {
return className; // 非法类名
}
componentTypeName.append(className.substring(dimension + 1,
length - 1));
break;
default:
return className; // 非法类名
}
for (int i = 0; i < dimension
没有合适的资源?快使用搜索试试~ 我知道了~
netty同步传输demo
共130个文件
class:73个
java:50个
prefs:2个
4星 · 超过85%的资源 需积分: 9 71 下载量 124 浏览量
2014-12-03
18:00:02
上传
评论
收藏 154KB ZIP 举报
温馨提示
采用队列等待实现netty客户端同步调用,zookeeper管理分布式服务端。
资源推荐
资源详情
资源评论
收起资源包目录
netty同步传输demo (130个子文件)
ReflectionUtil.class 27KB
ClassUtil.class 14KB
ReceiverDispatcher.class 8KB
SimpleEndpoint.class 7KB
ConnectorGroup.class 6KB
DefaultServerManager.class 5KB
Connector.class 4KB
ClassUtil$TypeInfo.class 4KB
ServerTest.class 4KB
HandlerInitializer$IOHandler.class 4KB
DefaultEndpointRepository.class 3KB
Acceptor.class 3KB
TransportUtil.class 3KB
HandlerInitializer.class 3KB
ProxyUtil.class 3KB
DefaultPropertiesSupport.class 3KB
IpPortPair.class 3KB
DefaultServerManager$IZKServerListener.class 2KB
DefaultServerManager$1.class 2KB
NamedThreadFactory.class 2KB
SimpleCache.class 2KB
ReflectionUtil$5.class 2KB
ReceiverDispatcher$2.class 2KB
DefaultServerManager$IZKServerListListener.class 2KB
HessianObjectEncoder.class 2KB
TestBiz.class 2KB
HessianCodecFactory.class 2KB
Response.class 2KB
ResponseProxy.class 1KB
MethodKey.class 1KB
RequestProxy.class 1KB
HessianObjectDecoder.class 1KB
SimpleEndpoint$3.class 1KB
DefaultHolder.class 1KB
ServerTest$1.class 1KB
ProxyUtil$1.class 1KB
R.class 1KB
DefaultClient.class 1KB
DefaultEndpointFactory.class 1KB
ConcurrentUtil.class 1KB
ReflectionUtil$6.class 1KB
ReflectionUtil$4.class 913B
ReflectionUtil$1.class 875B
ResponseFuture.class 867B
ReceiverDispatcher$1.class 859B
Request.class 848B
ReflectionUtil$3.class 832B
StringUtil.class 803B
ReflectionUtil$2.class 775B
ClassLoaderUtil.class 774B
SimpleEndpoint$2.class 738B
SimpleEndpoint$1.class 734B
ResponseFuture$1.class 719B
SimpleResponse.class 675B
SimpleRequest.class 668B
EndpointRepository.class 536B
Propertyable.class 499B
Sender.class 462B
ServerManager.class 457B
ReflectionUtil$MethodCallback.class 404B
ReflectionUtil$FieldCallback.class 401B
Holder.class 374B
EndpointFactory.class 326B
Endpoint.class 326B
BizMethod.class 311B
Client.class 300B
ReflectionUtil$MethodFilter.class 298B
ReflectionUtil$FieldFilter.class 295B
Identifiable.class 241B
Server.class 210B
Receiver.class 177B
CodecFactory.class 136B
Business.class 129B
.classpath 1KB
ClassUtil.java 37KB
ReflectionUtil.java 37KB
ReceiverDispatcher.java 6KB
SimpleEndpoint.java 5KB
ConnectorGroup.java 4KB
DefaultServerManager.java 4KB
HandlerInitializer.java 4KB
ServerTest.java 3KB
Connector.java 2KB
DefaultEndpointRepository.java 2KB
TransportUtil.java 2KB
ProxyUtil.java 1KB
Acceptor.java 1KB
IpPortPair.java 1KB
TestBiz.java 1KB
DefaultPropertiesSupport.java 1KB
MethodKey.java 1KB
NamedThreadFactory.java 1KB
Response.java 1KB
HessianObjectEncoder.java 1014B
HessianCodecFactory.java 1000B
HessianObjectDecoder.java 980B
SimpleCache.java 671B
ResponseProxy.java 647B
ServerManager.java 643B
RequestProxy.java 641B
共 130 条
- 1
- 2
资源评论
- wwcwolf2016-05-19资源太贵,不过如果能用。就值得。
- 箫(DuXiao)2018-05-27太贵啊,还在看,,
- oocean1234562016-05-10好贵啊,不错的
- 向北西行2015-09-15帮同事下的,不知道资源怎样,但是10分啊,太贵了,55555~
whycannotdownload
- 粉丝: 1
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功