ерунда
Еще та же фраза, документов найденных в интернете меньше чем монашеский волос, так что давайте просто погрызем исходники.После долгого времени я наконец-то погрыз класс: XMLMessageTemplateLoader
Правильно, это буквально означает преобразование файла template.xml непосредственно в объект шаблона. Моя основная задача проанализировать,то есть данные и шаблон готовые.Мне нужно просто разобрать поток данных по шаблону.К видел эту штуку,а потом совместил с методом в предыдущей статье, он должен быть в состоянии разобрать его Я, кажется, вижу рассвет победы.
После моей ожесточенной работы реальность наговорила мне много шума: Шаблон с id 0 не зарегистрирован.
Шаблон не прописал 0. Этот шаблон, я в шоке, у меня такого нет, я много искал в интернете, и наконец нашел большого парня, который давно изучает это дело (https : //github.com/kuangtu/fixfast ), я взглянул на пример кода, написанный здоровяком, всего в нескольких строчках намеки на жизнь между строк... не по теме, пример кода написал большой парень в основном такой же, как мой.Почему?Он может делать то же, что и я, но поставщик данных не может мне лгать и давать мне ложные данные намеренно, верно?
Данные получены с Шанхайской фондовой биржи.В документе, предоставленном Шанхайской фондовой биржей, сказано, что будет Tag96 от протокола STEP.Значением этого Tag96 является поток протокола FAST.Потом я передам данные Тег96 из потока протокола STEP, предоставленного Шанхайской фондовой биржей.Вытащил его, проанализировал, не удалось, проанализировал, не удалось, анализ не прошел, кто знает, сколько позиций я сменил, все еще не беременна ... не удалось успешно проанализировать.
Позже я сохранил поток Tag96 в виде файла, и когда я собирался разобрать его по файлу, я вдруг обнаружил, что преобразованная из Tag96 строка выглядит знакомо, и она по-прежнему начинается с «8=". Это ШАГ. насчет договора, это афера, а в документе, который он дал, не было сказано, что он матрешка, и договорились о запрете матрешки.
В конце концов, я вытащил Tag96 и снова запустил код для разбора протокола STEP, а затем вытащил Tag96 и разобрал его, и тогда парсинг прошел успешно.На самом деле исходный метод был фактически правильным.Ошибка не в чем. более того, источник данных выкопал для меня яму.
образец кода
Давайте сначала перейдем к коду большого парня и добавим несколько строк комментариев, которые мне не нужны для личного ознакомления.
//从文件中导入模板,自己注意一下路径即可
InputStream templateSource = new FileInputStream("data/RDDFastTemplates-1.1.xml");
XMLMessageTemplateLoader templateLoader = new XMLMessageTemplateLoader();
templateLoader.setLoadTemplateIdFromAuxId(true);
//载入模板
templateLoader.load(templateSource);
System.out.println("the tamplate count is" + templateLoader.getTemplateRegistry().getTemplates().length);
//载入数据源
InputStream is = new FileInputStream("data/fastdata.bin");
MessageInputStream mis = new MessageInputStream(is);
//注册模板
mis.setTemplateRegistry(templateLoader.getTemplateRegistry());
Message md = null;
int iCount = 0;
//打开debug追踪开关,显示字段信息
mis.getContext().setTraceEnabled(true);
//循环解析,直到解析完
while((md = mis.readMessage()) != null)
{
System.out.println("the mesage template id is: " + md.getTemplate().getId());
}
В моем коде нет большой разницы
//用糊涂工具类取文件,模板路径为源代码的:resources/template/template.xml
ClassPathResource classPathResource = new ClassPathResource("template/template.xml");
InputStream inputStream = classPathResource.getStream();
//一个模板文件可能包含多个模板,我这里只有1个,省事就直接搞了
MessageTemplate template = new XMLMessageTemplateLoader().load(inputStream)[0];
Context context = new Context();
context.registerTemplate(4001, template);
try {
//数据源byte[]
InputStream sbs = new ByteArrayInputStream(buff);
//解码器
FastDecoder fastDecoder = new FastDecoder(context, sbs);
//重置一下状态,理论上是没解析一条需要重置一次
//fastDecoder.reset();
//解码
Message msg111 = fastDecoder.readMessage();
log.info("解码的消息1:{}", msg111.getString(1));
} catch (Exception e) {
e.printStackTrace();
}