java - 使用 Thrift 进行离线序列化?

标签 java c# thrift

我使用 Apache Thrift 协议(protocol)进行平板电脑服务器和跨语言集成,几年后一切顺利。

集成是在语言(C#/C++/PC Java/Dalvik Java)之间进行的,而 thrift 可能是最简单、最安全的集成之一。所以我想用 Thrift 库打包重新打包复杂的数据结构(并且多年来发生了变化)。让我们用节俭的术语来说是 OfflineTransport 或 OfflineProtocol。

场景:

我想制定备份解决方案,例如在互联网提供商故障期间以离线模式处理数据:序列化、存储、尝试以几种方式处理。例如,通过不良的备份连接等通过普通电子邮件发送序列化数据。

问题是:Thrift 哲学中的哪个部分对我来说是最好的扩展点?

据我了解,只有部分在线协议(protocol)可以离线备份,即无法实时回值,没关系。

最佳答案

寻找序列化器。还有杂项。实现,但它们都共享相同的共同概念,即使用缓冲区或文件/流作为传输介质:

用 C# 写入数据

例如我们计划将这些位存储到 bytes[] 缓冲区中。所以可以这样写:

var trans = new TMemoryBuffer();
var prot = new TCompactProtocol( trans);
var instance = GetMeSomeDataInstanceToSerialize();
instance.Write(prot);

现在我们可以获取数据了:

var data = trans.GetBuffer();

用C#读取数据

读取的工作方式类似,只是您需要从某个地方知道要构造什么根实例:

var trans = new TMemoryBuffer( serializedBytes);
var prot = new TCompactProtocol( trans);
var instance = new MyCoolClass();
instance.Read(prot);

其他调整

加载过程中先有鸡还是先有蛋问题的一种解决方案可能是使用union作为额外的序列化容器:

union GenericFileDataContainer {
  1 : MyCoolClass  coolclass;
  2 : FooBar  foobar
  // more to come later
}

通过在序列化过程中始终使用此容器作为根实例,可以轻松添加更多类,而不会破坏兼容性,并且无需预先知道文件中到底有什么 - 您只需读取它并检查哪些元素在联合中设置。

关于java - 使用 Thrift 进行离线序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45502476/

相关文章:

java - 错误找不到符号和类离散属性

json - Thrift、JSON 和 REST 之间的区别

c# - 使用 Emgucv 比较两个图像

hadoop - hadoop的各种大数据传输方法相互比较如何?

c# - Thrift 如何处理 Zlib 刷新标记被分割成多个消息?

java - 如何使用 akka Remote Actor 正确关闭 JVM

java - 格式化一个Jtable Cell,如果格式化不合法,则什么都不做

java - Java中的音效?

在 where 子句中调用扩展方法时的 C# LINQ 性能

c# - MVC 路由未保留在 RedirectToAction 上