从以原始格式存储的Aerospike DB获取数据时出现问题



有人能建议我如何使用Aerospike客户端在Aerospike中检索以原始格式存储的数据吗?我可以从Aerospike获取所有其他类型的数据,但不能获取以原始格式保存的数据。C语言中存在等价函数,但在Java中找不到等价函数
Aerospike中设置数据的C语言函数名称as_record_set_raw
Aerospike中获取数据的C语函数名称
as_record_get_bytes

在使用Aerospike客户端从Java获取数据时,我得到{msg=[B@6d3163a6,length=10},而消息以原始格式存储。

预期输出:-{msg=666 65 78 44,length=10}
已经检查了工作区的编码部分

PS:-getBytes((不工作,正在获取以下异常:-java.lang.ClassCastException:类[B不能强制转换为类java.lang.Long([B和java.lang.lang位于加载程序'bootstrap'的模块java.base中(

code

userKey = new Key("test", "testset", key);
userRecord = client.get(null, userKey);
if (userRecord != null) {
System.out.println("nINFO: User record read successfully! Here are the details:n");
System.out.println("msg:   " + userRecord.getValue("msg")+ "n");
}

至少在最近的javadocs中,我在Record对象上看不到getBytes()方法。

我看到C函数as_set_record_raw()被记录为Set specified bin's value to an NULL terminated string。因此,我建议使用com.aerospike.client.Record.getString()java方法,并根据需要使用StringgetBytes()方法来获取原始字节数组。

编辑:我假设您正在尝试通过使用C客户端编写的Java客户端读取数据。

原始数据实际上是存储在数据库中的未编码字节。对我来说,最简单的方法是将数据转换为字节数组,并将字节数组转换为字符串以使用它:

userKey = new Key("test", "testset", key);
userRecord = client.get(null, userKey);
if (userRecord != null) {
byte[] myByteArray = (byte[])userRecord.getValue(msg);
System.out.println("nINFO: User record read successfully! Here are the details:n");
System.out.println("msg:   " + Arrays.toString(myByteArray) + "n");
}

如果你想看到一些使用这种类型数据的功能示例,以防我借用了你的代码,请在Aerospike的教程笔记本中查看Aerospike Java客户端代码和Java-intro_to_transactions.ipynb笔记本中的这个代码示例。

最新更新