我现在正在使用grizzly框架,并寻找一种方法来改善我们的交换直接市场访问连接的延迟。
我们的交换信息格式如下:
在grezzly中,我可以像这个例子一样轻松创建一个消息解析器: https://javaee.github.io/grizzly/coreframeworksamples.html#/Parsing_an_incoming_message
我正在寻找一个关于如何在Chronicle-Network和Wire中创建相同解析器的示例或教程。
更新:
如何从已分配固定长度的Wire读取/写入String?说写作' 12345678'进入一个固定的20字节空间。该字符串将在前8个字节打包,剩余的12个字节将用NULL字节填充。
这是我的代码。它有效,但我认为这不是正确的方法。
private static final byte START_OF_MESSAGE = 0x02;
private int length;
private String compId;
@Override
public void readMarshallable(WireIn in) throws IORuntimeException {
in.bytes().readByte();
// first field
length = in.bytes().readInt();
// second field
byte[] b = new byte[LENGTH_COMP_ID];
in.bytes().read(b);
compId = new String(b).trim();
}
@Override
public void writeMarshallable(WireOut out) {
out.bytes().writeByte(START_OF_MESSAGE);
// first field
out.bytes().writeInt(length);
/** second field, converting the string to byte[] */
out.bytes().write(getBytes(compId, LENGTH_COMP_ID));
}
/**
* retrieve a byte array of str with length = len
*/
private byte[] getBytes(String str, int len) {
if (str == null) {
return null;
}
byte[] b = new byte[len];
if (str.length() > len) {
return str.substring(0, len).getBytes();
} else {
byte[] b2 = str.getBytes();
for (int i = 0 ; i < b2.length ; i++) {
b[i] = b2[i];
}
}
return b;
}
答案 0 :(得分:0)
我建议您查看Wire中的测试用例,如果您想要我们提供付费培训课程的教程,请联系sales@chronicle.software