You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java-Android WebSockets开发:解析CryptoCompare流数据

解析CryptoCompare WebSocket实时数据流格式

嘿,我来帮你拆解下这段CryptoCompare WebSocket流数据的格式和含义,我之前研究过他们的实时数据接口,刚好能给你捋清楚~

首先先把你收到的原始响应贴出来,方便对照:

5~CCCAGG~XRP~USD~4~1521460342~1000~651.6800000000001~214344993~61477290.44395565~40404715.58782694~204630354.90428987~125295222.52928983~Bitfinex~40fe8 5~CCCAGG~BTC~USD~1~8345.49~1521460342~1~8330.5~214344994~73285.13728421592~609108591.9429483~199960.38011137667~1585164124.8472543~fe9 5~CCCAGG~ETH~USD~1~537.41~355733.2471545533~190548675.34079295~1348542.794115353~679086434.31...

核心规则

这段数据是多个独立行情更新条目用空格分隔而成,每个条目内部的字段用~符号拆分,所有条目都以5~CCCAGG~开头——这里的5是CryptoCompare定义的「实时行情更新」消息类型,CCCAGG是他们的聚合数据源(把多个交易所的行情数据合并后的结果)。

逐个字段拆解(以第一个XRP条目为例)

我们把第一个条目5~CCCAGG~XRP~USD~4~1521460342~1000~651.6800000000001~214344993~61477290.44395565~40404715.58782694~204630354.90428987~125295222.52928983~Bitfinex~40fe8拆分后,每个位置的字段含义如下:

  • 索引0:5 → 消息类型,固定为5表示这是实时行情更新(还有其他类型比如0是心跳包,2是订阅确认)
  • 索引1:CCCAGG → 数据源,这里是CryptoCompare的聚合数据源;如果订阅单个交易所,会显示交易所名称(比如Bitfinex)
  • 索引2:XRP → 基础币种(你关注的加密货币)
  • 索引3:USD → 报价币种(计价的法定货币/加密货币)
  • 索引4:4 → 更新类型,不同数字对应不同的更新维度:
    • 1:简单更新,包含最新成交价、基础成交量等核心数据
    • 4:全面更新,包含24h成交量、累计成交额等更多深度数据
  • 索引5:1521460342 → Unix时间戳(秒级),转Java的Date需要乘以1000转成毫秒级
  • 索引6:1000 → 本次更新的基础币种成交量(XRP的数量)
  • 索引7:651.6800000000001 → 最新成交价(XRP/USD的当前价格)
  • 索引8:214344993 → CryptoCompare内部的更新序号/计数,一般不需要处理
  • 索引9:61477290.44395565 → 24小时内基础币种总成交量(XRP的累计数量)
  • 索引10:40404715.58782694 → 24小时内报价币种总成交额(美元计价的累计金额)
  • 索引11:204630354.90428987 → 从统计开始至今的基础币种累计成交量
  • 索引12:125295222.52928983 → 从统计开始至今的报价币种累计成交额
  • 索引13:Bitfinex → 该条行情数据的原始来源交易所
  • 索引14:40fe8 → 内部校验标识,不需要业务处理

快速解析示例(Java-Android)

在Android里可以用字符串拆分快速解析每个字段,比如:

// 假设收到的单条行情数据
String singleEntry = "5~CCCAGG~XRP~USD~4~1521460342~1000~651.6800000000001~214344993~61477290.44395565~40404715.58782694~204630354.90428987~125295222.52928983~Bitfinex~40fe8";
String[] fields = singleEntry.split("~");

// 解析核心字段
int messageType = Integer.parseInt(fields[0]);
String baseCoin = fields[2];
String quoteCoin = fields[3];
double lastPrice = Double.parseDouble(fields[7]);
long updateTime = Long.parseLong(fields[5]) * 1000; // 转成Java毫秒时间戳

// 其他字段按需解析即可

内容的提问来源于stack exchange,提问作者Aftab Safdar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:32:03