如何从 Netty JAVA 中的连续 buffer/byte 数组中获取特定的字符串模式?
How to get a specific string pattern from a continous buffer/byte array in Netty JAVA?
我目前正在使用 Netty。现在的问题是,我想从缓冲区中检索特定的字符串。例如,如果缓冲区数据如下:
8=FIX.4.2|9=00815|35=W|49=TT_PRICE|56=SAP0094X|10=134|8=FIX.4.2|9=00816|35=W49=TT_PRICE|56=SAP0094X|10=121
现在我想要以“8=xxx”开头并以“10=xxx”结尾的字符串。您可以清楚地看到我们在缓冲区中附加了两个字符串。注意上面的数据是字节数组。所以,有时我会得到准确的字符串,有时我会得到字符串和附加的完整字符串的另一半。我想要的只是,如何获得从“8=xxx”到“10=xxx”的确切字符串。我在 Netty 中看到 DelimiterBasedFrameDecoder class,它只是检查指定的分隔符并为我们提供字符串。同样,我该怎么做?
我的建议是翻译缓冲区并使用正则表达式来匹配您的目标子字符串:
ByteBuffer bb = /* byte buffer */
String text = new String(bb.array(), 0, bb.position(), bb.remaing(), Charset.defaultCharset());
// I assume that this is the string: "8=FIX.4.2|9=00815|35=W|49=TT_PRICE|56=SAP0094X|10=134|8=FIX.4.2|9=00816|35=W49=TT_PRICE|56=SAP0094X|10=121"
// If you need info on the regex just ask for it
Pattern r = Pattern.compile("(8=\w\w\w)[\s\S]*?(10=\w\w\w)");
Matcher m = r.matcher(text);
while (m.find()) {
System.out.println(m.group());
}
请注意,Charset.defaultCharset()
可以根据您的 ByteArray 使用的编码进行更改
我目前正在使用 Netty。现在的问题是,我想从缓冲区中检索特定的字符串。例如,如果缓冲区数据如下:
8=FIX.4.2|9=00815|35=W|49=TT_PRICE|56=SAP0094X|10=134|8=FIX.4.2|9=00816|35=W49=TT_PRICE|56=SAP0094X|10=121
现在我想要以“8=xxx”开头并以“10=xxx”结尾的字符串。您可以清楚地看到我们在缓冲区中附加了两个字符串。注意上面的数据是字节数组。所以,有时我会得到准确的字符串,有时我会得到字符串和附加的完整字符串的另一半。我想要的只是,如何获得从“8=xxx”到“10=xxx”的确切字符串。我在 Netty 中看到 DelimiterBasedFrameDecoder class,它只是检查指定的分隔符并为我们提供字符串。同样,我该怎么做?
我的建议是翻译缓冲区并使用正则表达式来匹配您的目标子字符串:
ByteBuffer bb = /* byte buffer */
String text = new String(bb.array(), 0, bb.position(), bb.remaing(), Charset.defaultCharset());
// I assume that this is the string: "8=FIX.4.2|9=00815|35=W|49=TT_PRICE|56=SAP0094X|10=134|8=FIX.4.2|9=00816|35=W49=TT_PRICE|56=SAP0094X|10=121"
// If you need info on the regex just ask for it
Pattern r = Pattern.compile("(8=\w\w\w)[\s\S]*?(10=\w\w\w)");
Matcher m = r.matcher(text);
while (m.find()) {
System.out.println(m.group());
}
请注意,Charset.defaultCharset()
可以根据您的 ByteArray 使用的编码进行更改