当前位置: 首页 > 知识库问答 >
问题:

使用Apache Thrift转换Java/Scala字符的最佳方法

凤伟泽
2023-03-14

我需要使用Apache Thrift来定义要在Apache Kafka或直接RPC调用的帮助下在多个Scala微服务之间共享的公共数据结构。

考虑到以下情况,我想知道在Thrift中定义Scala字符类型的最佳方法是什么:

Char是一个16位无符号整数(相当于Java的Char基元类型),是scala的一个子类型。AnyVal。Char的实例不由底层运行时系统中的对象表示。

在Apache Thrift类型中,与无符号整数无关:

请注意没有无符号整数类型。这是因为在许多编程语言中没有本机无符号整数类型。

我必须定义一个Thrift结构来映射这个Scala case类:

case class Grade(letter: Char, low: Option[Double], high: Option[Double])

所以现在的问题是,我应该如何映射字母:Char?

struct Grade {
    1: unsigned i16 letter // <- THIS IS CLEARLY WRONG
    2: optional double low
    3: optional double high
}

共有1个答案

和斌
2023-03-14

鉴于我们的选择,基本上有两种方法可以做到这一点:

  1. 改用下一个较大的有符号类型,以便unisgned适合
  2. 将无符号值从和转换为有符号值

虽然二进制协议将传输所有32位,即使其中一半没有真正使用,但TCompactProtocol例如没有。因此,“线路效率”是否受到影响更多的是实际使用的协议的问题,而不是数据类型。

这就是说,使用二进制或字符串作为BLOB容器来传输任意数据当然也是可行的,但在这种情况下,您基本上是“自己做”的,并且伴随着这种方法的所有负面影响。我没有告诉你不要这样做,我只是想明确地提到这一事实。

 类似资料:
  • 问题内容: 我有一个我想完全输出为String的。本质上,我想使用由制表符分隔的每个元素按顺序输出。有什么快速的方法可以做到这一点吗?你可以遍历它(或删除每个元素)并将其连接为字符串,但我认为这会非常慢。 问题答案: 基本上,使用循环来迭代是唯一的选择: 不要使用此代码,请继续阅读此答案的底部,以了解为什么不希望使用此代码,以及应该使用哪个代码代替: 实际上,字符串串联就可以了,因为javac编译

  • 我试图想出一个好的解决方案来将字符串转换为json格式,但我不知道它是否足够好。 我想我可能会使用str.replace from(to{,并在}{之间插入逗号,但我如何找到要插入的索引?“”代表Name、Author、fileSize呢?在转换为可读的json字符串之后,我可以序列化为json(由GSON/Jackson)。

  • 问题内容: 我正在寻找Java中字符串查找和替换的最佳方法。 这句话是这样的:“我叫米兰,人们把我称为米兰·瓦西奇​​”。 我想用Milan Vasic代替字符串Milan,但是在我已经拥有Milan Vasic的地方,不应该这样。 搜索/替换后的结果应为:“我叫Milan Vasic,人们称我为Milan Vasic”。 我曾尝试使用indexOf()以及Pattern / Matcher组合,

  • 本文向大家介绍在Python3中将字符串转换为字节的最佳方法,包括了在Python3中将字符串转换为字节的最佳方法的使用技巧和注意事项,需要的朋友参考一下 要将字符串转换为字节,有多种方法, 方法1:使用encode()方法 输出结果 在python3中,第一个参数encode()默认为'utf-8'。据推测,这种方法也更快,因为默认参数在C代码中导致NULL。 方法2:使用bytes()构造函数

  • 问题内容: 我正在尝试将布尔值转换为字符串类型… 要么 以上哪一项效率更高? 问题答案: 我认为它们之间不会有明显的性能差异,但是我更喜欢第一种方法。 如果您有参考,则为时抛出。由于引用在传递给方法之前已取消装箱。 同时,如源代码所示,method进行显式检查: 只需测试以下代码: 对于原始布尔值,没有区别。

  • 问题内容: 顾名思义,将字符串数组转换为向量的最佳方法是什么? 谢谢 问题答案: 调用Vector的构造函数,该构造函数使用现有集合(在本例中为数组)初始化自身: