Java Thrift Client and Binary data



因此,根据我对节俭的理解,Java是唯一支持的语言,没有二进制安全字符串,因此是节俭二进制类型。 我的问题是它似乎不起作用。

我的定义文件是:

service myService {
     int myMethod(1:binary input)
}

我的 Java 客户端在调用 myMethod 之前,从观察到具有正长度和可打印字节的二进制数据构建 ByteBuffer。

紧接着在myMethod的C++实现(来自节俭生成的服务器框架)中,尝试打印输入显示它始终为空,大小为0。

知道我在这里错过了什么吗? 将二进制更改为字符串使一切像魅力一样工作,减去我不希望以后处理不安全的 java 转换字符串的事实......

很可能你遇到了问题,因为Java中的ByteBuffer具有可变状态。因此,任何读取操作实际上都会修改 ByteBuffer,因为它会修改读取位置。

在 java 中使用节俭二进制文件的最简单(但不是最有效的)方法是将二进制文件创建为字节数组,并在调用之前立即使用包装它们的信息缓冲区,即:

byte[] input = ....;
myService.myMethod(ByteBuffer.wrap(input));

另一种可能的解决方案是使用ByteBuffer.duplicat来保持原始缓冲区的安全,即:

ByteBuffer input = ....;
dump(input.duplicate());// dump function may change buffer position
myService.myMethod(input);

相关内容

最新更新