首页 > 其他分享 >jvQuant level2行情协议解析

jvQuant level2行情协议解析

时间:2024-07-13 11:30:43浏览次数:15  
标签:解压 MAX 压缩 zlib level2 WBITS 解析 jvQuant

行情解析

jvQuant行情推送用的websocket协议,行情传输使用的是无标志的压缩二进制流。需要注意解压缩的方法。

可以参考官方的Demo:GitHub - jvQuant/OpenAPIDemo jvQuant OpenAPI Demo

压缩协议

当压缩后的数据没有明确的标志位(如文件头或文件尾标记)时,解压过程通常依赖于以下几个因素:

  1. 了解压缩算法
    • 首先,需要明确使用的是哪种压缩算法。不同的压缩算法有不同的解压方式。在zlib的情况下,它提供了一套标准的压缩和解压函数,因此你需要确保使用的是zlib的压缩函数进行压缩的。
  2. 完整的压缩数据
    • 解压过程需要完整的压缩数据。如果数据在传输或存储过程中被截断或损坏,解压可能会失败。
  3. 压缩数据的长度
    • 在某些情况下,你可能需要知道压缩数据的长度(或至少是一个足够大的缓冲区来容纳解压后的数据)。zlib的uncompress函数需要知道输出缓冲区的大小,并在解压后更新这个大小以反映实际解压出的数据长度。
  4. 使用正确的解压函数
    • 使用zlib进行解压时,应使用uncompress函数(或对于gzip格式的文件,使用inflateInitinflateinflateEnd等函数序列)。确保调用这些函数时传入了正确的参数,包括指向压缩数据的指针、压缩数据的长度、指向解压数据缓冲区的指针以及解压数据缓冲区的大小(传址调用)。
  5. 错误处理
    • 解压过程中可能会遇到各种错误,如内存不足、输出缓冲区太小、输入数据损坏等。zlib的解压函数会返回错误代码,你应该检查这些错误代码并根据需要进行错误处理。
  6. 示例代码
    • 你可以参考zlib的官方文档或示例代码来了解如何正确使用解压函数。以下是一个简化的示例,展示了如何使用zlib的uncompress函数来解压数据:

解压方法

在Java中,如果你使用Inflater(true)来创建一个Inflater对象并设置nowrap参数为true,这意味着你正在处理一个不使用zlib包装(即没有zlib头部和校验和)的原始DEFLATE数据流。在C++中,要实现相同的解压功能,你需要使用zlib库中的inflate函数,并适当设置其参数来模拟nowrap模式。

然而,需要注意的是,zlib的API并不直接提供一个类似于Java Inflater(true)的构造函数或单个函数调用来启用nowrap模式。相反,你需要通过调用inflateInit2(而不是inflateInit)并指定窗口位大小(通常是MAX_WBITS的某个值)来启用nowrap模式。对于nowrap模式,你应该将窗口位大小设置为-MAX_WBITS(即-15,如果MAX_WBITS定义为15)

Python

Python解压缩好弄,看官方文档使用

zlib.decompress(message, -zlib.MAX_WBITS)

增加MAX_WBITS标志位即可。

PHP

PHP使用gzinflate()方法。

Golang

Golang用flate.NewReader也可以解压。

JAVA

JAVA 需要注意,需使用Inflater(true)来创建一个Inflater对象并设置nowrap参数为true,这意味着你正在处理一个不使用zlib包装(即没有zlib头部和校验和)的原始DEFLATE数据流。

Inflater inflater = new Inflater(true);

C++

C++也需要设置MAX_WBITS标志位,使用inflateInit2方法。

ret = inflateInit2(&strm, -MAX_WBITS);

参考资料

详细代码可以参考:

GitHub - jvQuant/OpenAPIDemo: jvQuant OpenAPI Demo 

jvQuant量化OpenAPI 开发文档

标签:解压,MAX,压缩,zlib,level2,WBITS,解析,jvQuant
From: https://blog.csdn.net/FuckTheWindows/article/details/140396714

相关文章

  • C语言内存管理深度解析
    第一章基础概念梳理1.1堆与栈的区别在C语言中,堆和栈是两种重要的内存管理机制,它们之间存在显著的区别。首先,栈内存是由编译器自动分配和释放的,其操作方式类似于数据结构中的栈,遵循后进先出(LIFO)的原则。每当一个函数调用发生时,就会在栈上分配一块内存用于存储该函数的局部变......
  • 亚马逊自养号测评环境系统全解析:从注册到下单,一次成号无忧
    亚马逊测评的关键在于养号,这是因为测评需要买家账号来操作。而养号不仅仅是让账号能多次使用,更重要的是通过维护让账号更健康、更有价值。很多人容易忽略的是,首次购买(首单)的成功率和它对账号的重要性。首单成功率高,账号就能更快地建立起良好的记录,对后续的测评结果也有积极影响......
  • PyTorch 分布式使用方式及代码解析
    一、PyTorch分布式DP与DDP1.1 PyTorch分布式支持数据并行 模型并行​​​​​​1.2 PyTorch分布式调用-DP 1.3 PyTorch分布式调用-DDP 1.4 PyTorch分布式-通信后端 gloo:具有各种原语的集体通信库,用于多机训练。Facebook......
  • 2024年06月CCF-GESP编程能力等级认证C++编程三级真题解析
    本文收录于专栏《C++等级认证CCF-GESP真题解析》,专栏总目录:点这里。订阅后可阅读专栏内所有文章。一、单选题(每题2分,共30分)第1题小杨父母带他到某培训机构给他报名参加CCF组织的GESP认证考试的第1级,那他可以选择的认证语言有()种。A.1B.2C.3D.4答案:C第2......
  • 2023CSP真题+答案+解析
    一、 单项选择题(共15题,每题2分,共计30分:每题有且仅有一个正确选项)1. 在C++中,下面哪个关键字用于声明一个变量,其值不能被修改?()。A. unsigned B. const C. static D. mutable答案:B在C++中,关键字const用于声明一个变量,表示其值是常量,不能被修改。一旦用con......
  • 深入解析香橙派 AIpro开发板:功能、性能与应用场景全面测评
    文章目录引言香橙派AIpro开发板介绍到手第一感觉开发板正面开发板背面性能应用场景移植操作系统香橙派AIpro开发板支持哪些操作系统?烧写操作系统到SD卡中启动开发板的步骤查看系统提供的事例程序体验——开发的简洁性视频播放展示ffmpeg简介ffmpeg播放视频安装ffmpeg......
  • 主流json解析框架示例
    主流json解析框架示例jackson、gson、fastjson/fastjson2三种主流json解析框架对比●性能:在性能方面,Fastjson通常被认为是最快的JSON解析库,其次是Jackson和Gson,json-lib的性能相对较低。●API和功能:Jackson提供了非常灵活、强大的API,支持各种高级功能,例如树模型、数据绑定、......
  • JVM参数系列解析
    -XX:+UseCompressedOopsJavaSE6U23开始,JVM会默认开启压缩指针。JVM之压缩指针(CompressedOops)-XX:+DisableExplicitGC强制禁用手动gcJava虚拟机System.gc()解析CMS系列-XX:+UseParNewGC-XX:+UseParNewGC是一个与Java虚拟机(JVM)垃圾回收策略相关的命令行选项,......
  • 计算机网络 ARP协议(地址解析协议)
            ARP(AddressResolutionProtocol)是一种用于解析网络层地址(如IPv4地址)和数据链路层地址(如MAC地址)之间对应关系的协议。它主要用于在局域网(LAN)中根据目标设备的IP地址获取其对应的MAC地址,以便在数据链路层进行准确的数据传输。ARP协议工作原理:ARP请求和响应......
  • 计算机网络 DNS协议---域名解析
    域名解析是计算机网络中的重要过程,它指的是将人类可读的域名(例如www.example.com)转换为计算机可理解的IP地址(例如192.0.2.1)的过程。这个过程依赖于域名系统(DNS)协议的支持。 DNS协议基本概念DNS(DomainNameSystem)是互联网中用于将域名解析为IP地址的分布式命名系统。它......