MessageCoder优化
This commit is contained in:
@@ -88,7 +88,7 @@ public class HttpResultCoder implements MessageCoder<HttpResult> {
|
||||
ByteBuffer buffer = ByteBuffer.wrap(data);
|
||||
HttpResult result = new HttpResult();
|
||||
result.setStatus(buffer.getInt());
|
||||
result.setContentType(MessageCoder.getShortString(buffer));
|
||||
result.setContentType(MessageCoder.getSmallString(buffer));
|
||||
result.setHeaders(MessageCoder.getMap(buffer));
|
||||
result.setCookies(getCookieList(buffer));
|
||||
int len = buffer.getInt();
|
||||
@@ -117,11 +117,11 @@ public class HttpResultCoder implements MessageCoder<HttpResult> {
|
||||
final ByteBuffer buffer = ByteBuffer.wrap(bs);
|
||||
buffer.putChar((char) list.size());
|
||||
list.forEach(cookie -> {
|
||||
putShortString(buffer, cookie.getName());
|
||||
putShortString(buffer, cookie.getValue());
|
||||
putShortString(buffer, cookie.getDomain());
|
||||
putShortString(buffer, cookie.getPath());
|
||||
putShortString(buffer, cookie.getPortlist());
|
||||
putSmallString(buffer, cookie.getName());
|
||||
putSmallString(buffer, cookie.getValue());
|
||||
putSmallString(buffer, cookie.getDomain());
|
||||
putSmallString(buffer, cookie.getPath());
|
||||
putSmallString(buffer, cookie.getPortlist());
|
||||
buffer.putLong(cookie.getMaxAge());
|
||||
buffer.put(cookie.getSecure() ? (byte) 1 : (byte) 0);
|
||||
buffer.put(cookie.isHttpOnly() ? (byte) 1 : (byte) 0);
|
||||
@@ -136,10 +136,10 @@ public class HttpResultCoder implements MessageCoder<HttpResult> {
|
||||
}
|
||||
final List<HttpCookie> list = new ArrayList<>(len);
|
||||
for (int i = 0; i < len; i++) {
|
||||
HttpCookie cookie = new HttpCookie(getShortString(buffer), getShortString(buffer));
|
||||
cookie.setDomain(getShortString(buffer));
|
||||
cookie.setPath(getShortString(buffer));
|
||||
cookie.setPortlist(getShortString(buffer));
|
||||
HttpCookie cookie = new HttpCookie(getSmallString(buffer), getSmallString(buffer));
|
||||
cookie.setDomain(getSmallString(buffer));
|
||||
cookie.setPath(getSmallString(buffer));
|
||||
cookie.setPortlist(getSmallString(buffer));
|
||||
cookie.setMaxAge(buffer.getLong());
|
||||
cookie.setSecure(buffer.get() == 1);
|
||||
cookie.setHttpOnly(buffer.get() == 1);
|
||||
|
||||
@@ -117,12 +117,12 @@ public class HttpSimpleRequestCoder implements MessageCoder<HttpSimpleRequest> {
|
||||
if (respformat != 0) {
|
||||
req.setRespConvertType(ConvertType.find(respformat));
|
||||
}
|
||||
req.setTraceid(MessageCoder.getShortString(buffer));
|
||||
req.setRequestURI(MessageCoder.getLongString(buffer));
|
||||
req.setPath(MessageCoder.getShortString(buffer));
|
||||
req.setRemoteAddr(MessageCoder.getShortString(buffer));
|
||||
req.setSessionid(MessageCoder.getShortString(buffer));
|
||||
req.setContentType(MessageCoder.getShortString(buffer));
|
||||
req.setTraceid(MessageCoder.getSmallString(buffer));
|
||||
req.setRequestURI(MessageCoder.getBigString(buffer));
|
||||
req.setPath(MessageCoder.getSmallString(buffer));
|
||||
req.setRemoteAddr(MessageCoder.getSmallString(buffer));
|
||||
req.setSessionid(MessageCoder.getSmallString(buffer));
|
||||
req.setContentType(MessageCoder.getSmallString(buffer));
|
||||
req.setCurrentUserid(MessageCoder.decodeUserid(buffer));
|
||||
req.setHeaders(MessageCoder.getMap(buffer));
|
||||
req.setParams(MessageCoder.getMap(buffer));
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
package org.redkale.mq;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigInteger;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.*;
|
||||
@@ -36,7 +37,7 @@ public interface MessageCoder<T> {
|
||||
//消息内容的类型
|
||||
public byte ctype();
|
||||
|
||||
//type: 1:string, 2:int, 3:long
|
||||
//type: 1:string, 2:int, 3:long, 4:BigInteger
|
||||
public static byte[] encodeUserid(Serializable value) {
|
||||
if (value == null) {
|
||||
return MessageRecord.EMPTY_BYTES;
|
||||
@@ -48,6 +49,9 @@ public interface MessageCoder<T> {
|
||||
long val = (Long) value;
|
||||
return new byte[]{(byte) 3, (byte) (val >> 56 & 0xFF), (byte) (val >> 48 & 0xFF), (byte) (val >> 40 & 0xFF),
|
||||
(byte) (val >> 32 & 0xFF), (byte) (val >> 24 & 0xFF), (byte) (val >> 16 & 0xFF), (byte) (val >> 8 & 0xFF), (byte) (val & 0xFF)};
|
||||
} else if (value instanceof BigInteger) {
|
||||
BigInteger val = (BigInteger) value;
|
||||
return Utility.append(new byte[]{4}, val.toByteArray());
|
||||
}
|
||||
String str = value.toString();
|
||||
if (str.isEmpty()) {
|
||||
@@ -71,6 +75,9 @@ public interface MessageCoder<T> {
|
||||
}
|
||||
byte[] bs = new byte[len - 1];
|
||||
buffer.get(bs);
|
||||
if (type == 4) {
|
||||
return new BigInteger(bs);
|
||||
}
|
||||
return new String(bs, StandardCharsets.UTF_8);
|
||||
}
|
||||
|
||||
@@ -101,13 +108,13 @@ public interface MessageCoder<T> {
|
||||
final ByteBuffer buffer = ByteBuffer.wrap(bs);
|
||||
buffer.putChar((char) map.size());
|
||||
map.forEach((key, value) -> {
|
||||
putShortString(buffer, key);
|
||||
putLongString(buffer, value);
|
||||
putSmallString(buffer, key);
|
||||
putBigString(buffer, value);
|
||||
});
|
||||
return bs;
|
||||
}
|
||||
|
||||
public static void putLongString(ByteBuffer buffer, String value) {
|
||||
public static void putBigString(ByteBuffer buffer, String value) {
|
||||
if (value == null || value.isEmpty()) {
|
||||
buffer.putInt(0);
|
||||
} else {
|
||||
@@ -117,7 +124,7 @@ public interface MessageCoder<T> {
|
||||
}
|
||||
}
|
||||
|
||||
public static String getLongString(ByteBuffer buffer) {
|
||||
public static String getBigString(ByteBuffer buffer) {
|
||||
int len = buffer.getInt();
|
||||
if (len == 0) {
|
||||
return null;
|
||||
@@ -127,7 +134,8 @@ public interface MessageCoder<T> {
|
||||
return new String(bs, StandardCharsets.UTF_8);
|
||||
}
|
||||
|
||||
public static void putShortString(ByteBuffer buffer, String value) {
|
||||
//一般用于存放类名、字段名、map中的key
|
||||
public static void putSmallString(ByteBuffer buffer, String value) {
|
||||
if (value == null || value.isEmpty()) {
|
||||
buffer.putChar((char) 0);
|
||||
} else {
|
||||
@@ -137,7 +145,7 @@ public interface MessageCoder<T> {
|
||||
}
|
||||
}
|
||||
|
||||
public static String getShortString(ByteBuffer buffer) {
|
||||
public static String getSmallString(ByteBuffer buffer) {
|
||||
int len = buffer.getChar();
|
||||
if (len == 0) {
|
||||
return null;
|
||||
@@ -154,7 +162,7 @@ public interface MessageCoder<T> {
|
||||
}
|
||||
Map<String, String> map = new HashMap<>(len);
|
||||
for (int i = 0; i < len; i++) {
|
||||
map.put(getShortString(buffer), getLongString(buffer));
|
||||
map.put(getSmallString(buffer), getBigString(buffer));
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
@@ -108,10 +108,10 @@ public class MessageRecordSerializer implements MessageCoder<MessageRecord> {
|
||||
long createTime = buffer.getLong();
|
||||
|
||||
Serializable userid = MessageCoder.decodeUserid(buffer);
|
||||
String groupid = MessageCoder.getShortString(buffer);
|
||||
String topic = MessageCoder.getShortString(buffer);
|
||||
String respTopic = MessageCoder.getShortString(buffer);
|
||||
String traceid = MessageCoder.getShortString(buffer);
|
||||
String groupid = MessageCoder.getSmallString(buffer);
|
||||
String topic = MessageCoder.getSmallString(buffer);
|
||||
String respTopic = MessageCoder.getSmallString(buffer);
|
||||
String traceid = MessageCoder.getSmallString(buffer);
|
||||
|
||||
byte[] content = null;
|
||||
int contentlen = buffer.getInt();
|
||||
|
||||
Reference in New Issue
Block a user