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