如何解决使用Apache Thrift转换Java / Scala Char的最佳方法
我需要使用Apache Thrift来定义通用数据结构,以便在Apache Kafka或直接RPC调用的帮助下在多个Scala微服务之间共享。
考虑到以下几点,我想知道在Thrift中定义Scala Char type的最佳方法是什么:
Char,一个 16位无符号整数(相当于Java的char基本类型)是scala.AnyVal的子类型。基本运行时系统中的对象未表示Char的实例。
在Apache Thrift types中,无符号整数没有任何意义:
请注意,没有无符号整数类型。这是由于许多编程语言中没有本机无符号整数类型。
我必须定义一个Thrift结构来映射此Scala案例类:
case class Grade(letter: Char,low: Option[Double],high: Option[Double])
所以现在的问题是我应该如何映射letter: Char
?
struct Grade {
1: unsigned i16 letter // <- THIS IS CLEARLY WRONG
2: optional double low
3: optional double high
}
解决方法
鉴于我们拥有的选择,基本上有两种方法可以做到:
- 改为使用下一个更大的带符号类型,以便将未识别的内容放入
- 将未签名的值从和投射到已签名
尽管二进制协议将传输所有32位,即使其中的一半未真正使用,例如TCompactProtocol
也不使用。因此,“有线效率”是否受到影响,主要是关于实际使用哪种协议的问题,而不是数据类型的问题。
话虽这么说,使用二进制或字符串作为BLOB容器来传输任意数据肯定也是可行的,但是在这种情况下,您实际上是“自己动手”,并伴随着这种方法带来的所有负面影响。我不是告诉你不要这样做,我只是想明确地提到这一事实。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。