Анализ протокола FAST (2) Импорт данных анализа шаблона

 ерунда

Еще та же фраза, документов найденных в интернете меньше чем монашеский волос, так что давайте просто погрызем исходники.После долгого времени я наконец-то погрыз класс: 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();
        }

рекомендация

отblog.csdn.net/qq_33601179/article/details/122360190