?? util.java
字號(hào):
*/
public static String getString(byte[] b) {
return getString(b, QQ.QQ_CHARSET_DEFAULT);
}
/**
* 根據(jù)某種編碼方式將字節(jié)數(shù)組轉(zhuǎn)換成字符串
* @param b 字節(jié)數(shù)組
* @param offset 要轉(zhuǎn)換的起始位置
* @param len 要轉(zhuǎn)換的長(zhǎng)度
* @param encoding 編碼方式
* @return 如果encoding不支持,返回一個(gè)缺省編碼的字符串
*/
public static String getString(byte[] b, int offset, int len, String encoding) {
try {
return new String(b, offset, len, encoding);
} catch (UnsupportedEncodingException e) {
return new String(b, offset, len);
}
}
/**
* 根據(jù)缺省編碼方式將字節(jié)數(shù)組轉(zhuǎn)換成字符串
* @param b 字節(jié)數(shù)組
* @param offset 要轉(zhuǎn)換的起始位置
* @param len 要轉(zhuǎn)換的長(zhǎng)度
* @return
*/
public static String getString(byte[] b, int offset, int len) {
return getString(b, offset, len, QQ.QQ_CHARSET_DEFAULT);
}
/**
* 把字符串轉(zhuǎn)換成int
* @param s 字符串
* @param faultValue 如果轉(zhuǎn)換失敗,返回這個(gè)值
* @return 如果轉(zhuǎn)換失敗,返回faultValue,成功返回轉(zhuǎn)換后的值
*/
public static int getInt(String s, int faultValue) {
try {
return Integer.parseInt(s);
} catch (NumberFormatException e) {
return faultValue;
}
}
/**
* 把字符串轉(zhuǎn)換成long
* @param s 字符串
* @param faultValue 如果轉(zhuǎn)換失敗,返回這個(gè)值
* @return 如果轉(zhuǎn)換失敗,返回faultValue,成功返回轉(zhuǎn)換后的值
*/
public static long getLong(String s, int radix, long faultValue) {
try {
return Long.parseLong(s, radix);
} catch (NumberFormatException e) {
return faultValue;
}
}
/**
* 把字符串轉(zhuǎn)換成int
* @param s 字符串
* @param radix
* 基數(shù)
* @param faultValue 如果轉(zhuǎn)換失敗,返回這個(gè)值
* @return 如果轉(zhuǎn)換失敗,返回faultValue,成功返回轉(zhuǎn)換后的值
*/
public static int getInt(String s, int radix, int faultValue) {
try {
return Integer.parseInt(s, radix);
} catch (NumberFormatException e) {
return faultValue;
}
}
/**
* 檢查字符串是否是整數(shù)格式
*
* @param s
* 字符串
* @return
* true表示可以解析成整數(shù)
*/
public static boolean isInt(String s) {
try {
Integer.parseInt(s);
return true;
} catch(NumberFormatException e) {
return false;
}
}
/**
* 把字符串轉(zhuǎn)換成Integer
* @param s 字符串
* @param faultValue 如果轉(zhuǎn)換失敗,返回等于這個(gè)值的Integer對(duì)象
* @return 如果轉(zhuǎn)換失敗,返回faultValue,成功返回轉(zhuǎn)換后的值
*/
public static Integer getInteger(String s, int faultValue) {
try {
return new Integer(s);
} catch (NumberFormatException e) {
return new Integer(faultValue);
}
}
/**
* 把字符串轉(zhuǎn)換成Integer
* @param s 字符串
* @param faultValue 如果轉(zhuǎn)換失敗,返回這個(gè)Integer對(duì)象
* @return 如果轉(zhuǎn)換失敗,返回faultValue,成功返回轉(zhuǎn)換后的值
*/
public static Integer getInteger(String s, Integer faultValue) {
try {
return new Integer(s);
} catch (NumberFormatException e) {
return faultValue;
}
}
/**
* 把字符串轉(zhuǎn)換成char類型的無(wú)符號(hào)數(shù)
* @param s 字符串
* @param faultValue 如果轉(zhuǎn)換失敗,返回這個(gè)值
* @return 如果轉(zhuǎn)換失敗,返回faultValue,成功返回轉(zhuǎn)換后的值
*/
public static char getChar(String s, int faultValue) {
return (char)(getInt(s, faultValue) & 0xFFFF);
}
/**
* 把字符串轉(zhuǎn)換成byte
* @param s 字符串
* @param faultValue 如果轉(zhuǎn)換失敗,返回這個(gè)值
* @return 如果轉(zhuǎn)換失敗,返回faultValue,成功返回轉(zhuǎn)換后的值
*/
public static byte getByte(String s, int faultValue) {
return (byte)(getInt(s, faultValue) & 0xFF);
}
/**
* @param ip ip的字節(jié)數(shù)組形式
* @return 字符串形式的ip
*/
public static String getIpStringFromBytes(byte[] ip) {
StringBuffer sb = new StringBuffer();
sb.append(ip[0] & 0xFF);
sb.append('.');
sb.append(ip[1] & 0xFF);
sb.append('.');
sb.append(ip[2] & 0xFF);
sb.append('.');
sb.append(ip[3] & 0xFF);
return sb.toString();
}
/**
* 從ip的字符串形式得到字節(jié)數(shù)組形式
* @param ip 字符串形式的ip
* @return 字節(jié)數(shù)組形式的ip
*/
public static byte[] getIpByteArrayFromString(String ip) {
byte[] ret = new byte[4];
StringTokenizer st = new StringTokenizer(ip, ".");
try {
ret[0] = (byte)(Integer.parseInt(st.nextToken()) & 0xFF);
ret[1] = (byte)(Integer.parseInt(st.nextToken()) & 0xFF);
ret[2] = (byte)(Integer.parseInt(st.nextToken()) & 0xFF);
ret[3] = (byte)(Integer.parseInt(st.nextToken()) & 0xFF);
} catch (Exception e) {
log.error(e.getMessage());
}
return ret;
}
/**
* 判斷IP是否相等
* @param ip1 IP的字節(jié)數(shù)組形式
* @param ip2 IP的字節(jié)數(shù)組形式
* @return true如果兩個(gè)IP相等
*/
public static boolean isIpEquals(byte[] ip1, byte[] ip2) {
return (ip1[0] == ip2[0] && ip1[1] == ip2[1] && ip1[2] == ip2[2] && ip1[3] == ip2[3]);
}
/**
* @param cmd 命令類型
* @return 命令的字符串形式,用于調(diào)試
*/
public static String getCommandString(char cmd) {
switch (cmd) {
case QQ.QQ_CMD_REQUEST_LOGIN_TOKEN:
return "QQ_CMD_REQUEST_LOGIN_TOKEN";
case QQ.QQ_CMD_LOGOUT:
return "QQ.QQ_CMD_LOGOUT";
case QQ.QQ_CMD_KEEP_ALIVE:
return "QQ.QQ_CMD_KEEP_ALIVE";
case QQ.QQ_CMD_MODIFY_INFO:
return "QQ.QQ_CMD_MODIFY_INFO";
case QQ.QQ_CMD_SEARCH_USER:
return "QQ.QQ_CMD_SEARCH_USER";
case QQ.QQ_CMD_GET_USER_INFO:
return "QQ.QQ_CMD_GET_USER_INFO";
case QQ.QQ_CMD_ADD_FRIEND:
return "QQ.QQ_CMD_ADD_FRIEND";
case QQ.QQ_CMD_DELETE_FRIEND:
return "QQ.QQ_CMD_DELETE_FRIEND";
case QQ.QQ_CMD_ADD_FRIEND_AUTH:
return "QQ.QQ_CMD_ADD_FRIEND_AUTH";
case QQ.QQ_CMD_CHANGE_STATUS:
return "QQ.QQ_CMD_CHANGE_STATUS";
case QQ.QQ_CMD_ACK_SYS_MSG:
return "QQ.QQ_CMD_ACK_SYS_MSG";
case QQ.QQ_CMD_SEND_IM:
return "QQ.QQ_CMD_SEND_IM";
case QQ.QQ_CMD_RECV_IM:
return "QQ.QQ_CMD_RECV_IM";
case QQ.QQ_CMD_REMOVE_SELF:
return "QQ.QQ_CMD_REMOVE_SELF";
case QQ.QQ_CMD_LOGIN:
return "QQ.QQ_CMD_LOGIN";
case QQ.QQ_CMD_GET_FRIEND_LIST:
return "QQ.QQ_CMD_GET_FRIEND_LIST";
case QQ.QQ_CMD_GET_FRIEND_ONLINE:
return "QQ.QQ_CMD_GET_FRIEND_ONLINE";
case QQ.QQ_CMD_CLUSTER_CMD:
return "QQ.QQ_CMD_CLUSTER_CMD";
case QQ.QQ_CMD_RECV_MSG_SYS:
return "QQ.QQ_CMD_RECV_MSG_SYS";
case QQ.QQ_CMD_RECV_MSG_FRIEND_CHANGE_STATUS:
return "QQ.QQ_CMD_RECV_MSG_FRIEND_CHANGE_STATUS";
case QQ.QQ_CMD_REQUEST_KEY:
return "QQ_CMD_REQUEST_KEY";
case QQ.QQ_CMD_GROUP_DATA_OP:
return "QQ_CMD_GROUP_NAME_OP";
case QQ.QQ_CMD_UPLOAD_GROUP_FRIEND:
return "QQ_CMD_UPLOAD_GROUP_FRIEND";
case QQ.QQ_CMD_DOWNLOAD_GROUP_FRIEND:
return "QQ_CMD_DOWNLOAD_GROUP_FRIEND";
case QQ.QQ_CMD_FRIEND_DATA_OP:
return "QQ_CMD_FRIEND_DATA_OP";
case QQ.QQ_CMD_SEND_SMS:
return "QQ_CMD_SEND_SMS";
case QQ.QQ_CMD_ADVANCED_SEARCH:
return "QQ_CMD_ADVANCED_SEARCH";
case QQ.QQ_CMD_CLUSTER_DATA_OP:
return "QQ_CMD_GET_TEMP_CLUSTER_ONLINE_MEMBER";
default:
return "UNKNOWN_TYPE " + (int)cmd;
}
}
/**
* 得到群操作的字符串形式,僅用于調(diào)試
* @param cmd
* @return
*/
public static String getClusterCommandString(byte cmd) {
switch (cmd) {
case QQ.QQ_CLUSTER_CMD_CREATE_CLUSTER:
return "QQ_CLUSTER_CMD_CREATE_CLUSTER";
case QQ.QQ_CLUSTER_CMD_MODIFY_MEMBER:
return "QQ_CLUSTER_CMD_MODIFY_MEMBER";
case QQ.QQ_CLUSTER_CMD_MODIFY_CLUSTER_INFO:
return "QQ_CLUSTER_CMD_MODIFY_CLUSTER_INFO";
case QQ.QQ_CLUSTER_CMD_GET_CLUSTER_INFO:
return "QQ_CLUSTER_CMD_GET_CLUSTER_INFO";
case QQ.QQ_CLUSTER_CMD_ACTIVATE_CLUSTER:
return "QQ_CLUSTER_CMD_ACTIVATE_CLUSTER";
case QQ.QQ_CLUSTER_CMD_SEARCH_CLUSTER:
return "QQ_CLUSTER_CMD_SEARCH_CLUSTER";
case QQ.QQ_CLUSTER_CMD_JOIN_CLUSTER:
return "QQ_CLUSTER_CMD_JOIN_CLUSTER";
case QQ.QQ_CLUSTER_CMD_JOIN_CLUSTER_AUTH:
return "QQ_CLUSTER_CMD_JOIN_CLUSTER_AUTH";
case QQ.QQ_CLUSTER_CMD_EXIT_CLUSTER:
return "QQ_CLUSTER_CMD_EXIT_CLUSTER";
case QQ.QQ_CLUSTER_CMD_SEND_IM:
return "QQ_CLUSTER_CMD_SEND_IM";
case QQ.QQ_CLUSTER_CMD_GET_ONLINE_MEMBER:
return "QQ_CLUSTER_CMD_GET_ONLINE_MEMBER";
case QQ.QQ_CLUSTER_CMD_GET_MEMBER_INFO:
return "QQ_CLUSTER_CMD_GET_MEMBER_INFO";
default:
return "Unknown QQ Cluster Command";
}
}
/**
* 返回文件命令的字符串形式,僅用作調(diào)試
* @param command
* @return
*/
public static String getFileCommandString(char command) {
switch(command) {
case QQ.QQ_FILE_CMD_HEART_BEAT:
return "QQ_FILE_CMD_HEART_BEAT";
case QQ.QQ_FILE_CMD_HEART_BEAT_ACK:
return "QQ_FILE_CMD_HEART_BEAT_ACK";
case QQ.QQ_FILE_CMD_TRANSFER_FINISHED:
return "QQ_FILE_CMD_TRANSFER_FINISHED";
case QQ.QQ_FILE_CMD_FILE_OP:
return "QQ_FILE_CMD_FILE_OP";
case QQ.QQ_FILE_CMD_FILE_OP_ACK:
return "QQ_FILE_CMD_FILE_OP_ACK";
case QQ.QQ_FILE_CMD_SENDER_SAY_HELLO:
return "QQ_FILE_CMD_SENDER_SAY_HELLO";
case QQ.QQ_FILE_CMD_SENDER_SAY_HELLO_ACK:
return "QQ_FILE_CMD_SENDER_SAY_HELLO_ACK";
case QQ.QQ_FILE_CMD_RECEIVER_SAY_HELLO:
return "QQ_FILE_CMD_RECEIVER_SAY_HELLO";
case QQ.QQ_FILE_CMD_RECEIVER_SAY_HELLO_ACK:
return "QQ_FILE_CMD_RECEIVER_SAY_HELLO_ACK";
case QQ.QQ_FILE_CMD_NOTIFY_IP_ACK:
return "QQ_FILE_CMD_NOTIFY_IP_ACK";
case QQ.QQ_FILE_CMD_PING:
return "QQ_FILE_CMD_PING";
case QQ.QQ_FILE_CMD_PONG:
return "QQ_FILE_CMD_PONG";
case QQ.QQ_FILE_CMD_YES_I_AM_BEHIND_FIREWALL:
return "QQ_FILE_CMD_YES_I_AM_BEHIND_FIREWALL";
default:
return "UNKNOWN TYPE " + (int)command;
}
}
/**
* 得到狀態(tài)的字符串表示
* @param status 狀態(tài)碼
* @return 字符串形式的狀態(tài)碼
*/
public static String getStatusString(byte status) {
switch(status) {
case QQ.QQ_FRIEND_STATUS_ONLINE:
return IQQNode.VALUE_ONLINE;
case QQ.QQ_FRIEND_STATUS_OFFLINE:
return IQQNode.VALUE_OFFLINE;
case QQ.QQ_FRIEND_STATUS_AWAY:
return IQQNode.VALUE_AWAY;
case QQ.QQ_FRIEND_STATUS_HIDDEN:
return IQQNode.VALUE_HIDDEN;
default:
return "Unknown Status";
}
}
/**
* 這個(gè)不是用于調(diào)試的,真正要用的方法
* @param encoding 編碼方式
* @return 編碼方式的字符串表示形式
*/
public static String getEncodingString(char encoding) {
switch(encoding) {
case QQ.QQ_IM_ENCODING_GB:
return "GBK";
case QQ.QQ_IM_ENCODING_EN:
return "ISO-8859-1";
case QQ.QQ_IM_ENCODING_BIG5:
return "BIG5";
default:
return "GBK";
}
}
/**
* 用于調(diào)試
* @param type 收到的消息類型
* @return 消息類型的字符串表示
*/
public static String getIMTypeString(char type) {
switch (type) {
case QQ.QQ_RECV_IM_FROM_FRIEND:
return "QQ_RECV_IM_TO_BUDDY";
case QQ.QQ_RECV_IM_FROM_STRANGER:
return "QQ_RECV_IM_TO_UNKNOWN";
case QQ.QQ_RECV_IM_CLUSTER_IM:
return "QQ_RECV_IM_CLUSTER_IM";
case QQ.QQ_RECV_IM_ADDED_TO_CLUSTER:
return "QQ_RECV_IM_ADDED_TO_CLUSTER";
case QQ.QQ_RECV_IM_DELETED_FROM_CLUSTER:
return "QQ_RECV_IM_DEL_FROM_CLUSTER";
case QQ.QQ_RECV_IM_REQUEST_JOIN_CLUSTER:
return "QQ_RECV_IM_REQUEST_JOIN_CLUSTER";
case QQ.QQ_RECV_IM_CREATE_CLUSTER:
return "QQ_RECV_IM_CREATE_CLUSTER";
case QQ.QQ_RECV_IM_SYS_MESSAGE:
return "QQ_RECV_IM_SYS_MESSAGE";
case QQ.QQ_RECV_IM_APPROVE_JOIN_CLUSTER:
return "QQ_RECV_IM_APPROVE_JOIN_CLUSTER";
case QQ.QQ_RECV_IM_REJECT_JOIN_CLUSTER:
return "QQ_RECV_IM_REJECT_JOIN_CLUSTER";
default:
return "QQ_RECV_IM_UNKNOWN";
}
}
/**
* 返回普通消息中的類型,僅用作調(diào)試
* @param type
* @return
*/
public static String getNormalIMTypeString(char type) {
switch(type) {
case QQ.QQ_IM_NORMAL_TEXT:
return "QQ_IM_NORMAL_TEXT";
case QQ.QQ_IM_TCP_REQUEST:
return "QQ_IM_TCP_REQUEST";
case QQ.QQ_IM_ACCEPT_TCP_REQUEST:
return "QQ_IM_ACCEPT_TCP_REQUEST";
case QQ.QQ_IM_REJECT_TCP_REQUEST:
return "QQ_IM_REJECT_TCP_REQUEST";
case QQ.QQ_IM_UDP_REQUEST:
return "QQ_IM_UDP_REQUEST";
case QQ.QQ_IM_ACCEPT_UDP_REQUEST:
return "QQ_IM_ACCEPT_UDP_REQUEST";
case QQ.QQ_IM_REJECT_UDP_REQUEST:
return "QQ_IM_REJECT_UDP_REQUEST";
case QQ.QQ_IM_NOTIFY_IP:
return "QQ_IM_NOTIFY_IP";
case QQ.QQ_IM_ARE_YOU_BEHIND_FIREWALL:
return "QQ_IM_ARE_YOU_BEHIND_FIREWALL";
case QQ.QQ_IM_ARE_YOU_BEHIND_PROXY:
return "QQ_IM_ARE_YOU_BEHIND_PROXY";
case QQ.QQ_IM_YES_I_AM_BEHIND_PROXY:
return "QQ_IM_YES_I_AM_BEHIND_PROXY";
case QQ.QQ_IM_REQUEST_CANCELED:
return "QQ_IM_REQUEST_CANCELED";
default:
return String.valueOf((int)type);
}
}
/**
* 返回字符串形式的回復(fù)類型,僅用于調(diào)試
* @param type 回復(fù)類型
* @return 字符串形式的回復(fù)類型
*/
public static String getIMReplyType(byte type) {
switch(type) {
case QQ.QQ_IM_NORMAL_REPLY:
return "QQ_IM_TEXT";
case QQ.QQ_IM_AUTO_REPLY:
return "QQ_IM_AUTO_REPLY";
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -