如何在Java中反序列化Thrift对象字符串

问题描述 投票:0回答:1

我的 Thrift 对象有一个字符串表示形式,如下所示:

objStr = "MyObject(id:1, name:abc xyz, flag:true)"

我想将其转换回 Thrift 对象本身。我怎样才能做到这一点?

我尝试使用 TDeserializer,如下所示:

TProtocolFactory messageProtocolFactory = new TBinaryProtocol.Factory();
TDeserializer deserializer = new TDeserializer(messageProtocolFactory);
MyObject myObj = new MyObject();
deserializer.deserialize(myObj, objStr.getBytes(StandardCharsets.UTF_8));

但我收到错误:

org.apache.thrift.transport.TTransportException: Cannot read. Remote side has closed. Tried to read 2 bytes, but only got 0 bytes. (This is often indicative of an internal error on the server side. Please check your server logs.)

如何反序列化我的对象字符串?

java serialization deserialization thrift thrift-protocol
1个回答
0
投票

错误的主要原因是您想要反序列化不适合

TBinaryProtocol
的数据。数据显然不是 Thrift 二进制格式。

由于您对这些数据字符串的来源提供的细节很少,因此答案也相当通用:您需要使用与数据最初生成方式相匹配的适当的反序列化方法。

据我所知,它不是 Thrift 附带的常见协议(二进制、紧凑、json)。因此,它要么是一些手工制作的 TProtocol 实现(对于 Thrift 来说是完全合法的),要么根本没有用 Thrift 进行序列化。

© www.soinside.com 2019 - 2024. All rights reserved.