从Streambase发布的Redis中阅读二进制数据类型(Java)

tjvv9vkg  于 2022-10-31  发布在  Redis
关注(0)|答案(1)|浏览(151)

下面是一段java代码,它将数据发布到Redis

import com.streambase.sb.util.ByteOrderedDataOutput;

byte[] valuebuffer=null;
ByteOrderedDataOutput boutput = new ByteOrderedDataOutput(0,tuple.getByteOrder());      
tuple.serialize(boutput,0); 
valuebuffer = boutput.getBuffer();
byte[] keybuffer = null;
String keyvalue = redisStream+"."+keyFieldStr;
keybuffer = keyvalue.getBytes();
strLuaCommands += "redis.call('set',KEYS["+ (++keyCount) +"],ARGV["+ (++argCount) +"])";
keys.add(keybuffer);
args.add(valuebuffer);

我能够通过python struct获取数据,但格式不正确。

import redis, struct
redis_client = redis.StrictRedis(host="abc.com", port=6379,  db=0)
temp = redis_client.get('samplekey')
struct.unpack("<" + ("s" * (len(temp))), temp)
bpsygsoo

bpsygsoo1#

Tuple.serialize()使用com.streambase.sb.util.ByteOrderedDataOutput类,该类从未成为StreamBase公共API的一部分,因此Tuple.serialize()方法也不应被视为公共API的一部分。
而且,没有特别的理由相信Python struct.unpack()方法知道如何理解StreamBase的ByteOrderedDataOutput,不管它是什么,所以你解包的不是你想要的也就不足为奇了。
一种快速想象的解决方案是使用StreamBase Python运算符将StreamBase元组转换为Python对象,然后使用Python脚本编写任何你想写入redis的内容。然后,由于你现在已经使用相同的Python补充库函数对内容进行了编码和解码,所以你将有更好的机会避免损坏数据。

相关问题