我正在使用Apache Avro。
我的架构具有映射类型:
{"name": "MyData",
"type" : {"type": "map",
"values":{
"type": "record",
"name": "Person",
"fields":[
{"name": "name", "type": "string"},
{"name": "age", "type": "int"},
]
}
}
}
编译模式后,genated Java类使用CharSequence
作为映射的键
MyData
。
使用Map
中的CharSequence
作为键非常不方便,有没有办法为Apache Avro中的Map
生成String
类型键?
附言
问题是,例如dataMap.containsKey(“SOME_KEY”)
即使那里有这样的键也会返回false
,只是因为它是CharSequence
。此外,使用现有键放置映射条目不会与旧键相关。这就是为什么我说使用CharSequence
作为密钥是不方便的。
显然,默认情况下,Avro使用字符序列
。我找到了一种将其配置为转换为<code>字符串的方法
从Avro 1.6.0开始,有一个选项可以让Avro始终执行到String的转换。有几种方法可以实现这一点。第一个是将架构中的avro.java.string属性设置为String:
{ "type": "string", "avro.java.string": "String" }
我没有测试过这个。
显然,Avro 1.6中有一个解决此问题的方法。您可以在项目的POM文件中指定字符串类型:
<stringType>String</stringType>
这一期提到的是AVRO-803...尽管插件的web文档没有反映这一点。
这个JIRA讨论是相关的。仍在使用的CharSequence的要点是向后兼容性。
正如Charles Forsythe所指出的那样,通过在架构中设置字符串属性,已经添加了一个解决方法,用于何时需要String。
{ "type": "string", "avro.java.string": "String" }
这里的默认类型是他们自己的Utf8类。除了手动规范和pom.xml设置,甚至还有一个avro-tools编译选项,-string
选项:
java -jar avro-tools.1.7.5.jar compile -string schema /path/to/schema .
问题内容: 我正在为程序包设计一个公共接口(API)。我想知道,我应该一般使用代替。(我主要是在谈论公共接口)。 这样做有什么弊端吗?这被认为是一种好习惯吗? 将其用于类似标识符的目的(将值与基于散列的容器中的集合进行匹配时)如何处理? 问题答案: 在通用库中很少使用。通常在主要用例是字符串处理(操作,解析等)时使用。 一般来说 ,你可以做一个东西,你可以用做(平凡的,因为你可以每次转换成)。但是
问题内容: 将a转换为a 的最直接和/或最有效的方法是什么? 问题答案: 没有副本: 但是,该方法可能更容易编写,更容易阅读和更快。
问题内容: 我正在用selenium测试站点,我需要向其中一个字段发送电子邮件。到目前为止,我正在使用以下Java方法: 但是由于(对我而言)一个未知的原因,这正是将这个值发送到字段: (因此,基本上将“ @”替换为“ v”) 出于好奇:我是捷克人,有捷克语键盘。写“ @”符号的一种快捷方式是rightAlt + v,因此我相信可以连接… 因此,我正在搜索始终写有“ @”符号的任何“防弹” met
问题内容: 如何将Java转换为? 问题答案: 通过调用其方法。 返回一个包含此序列中字符的字符串,该字符串的顺序与此序列相同。字符串的长度将是此序列的长度。
描述 (Description) java.util.regex.Matcher.reset(CharSequence input)方法使用新的输入序列重置此匹配器。 声明 (Declaration) 以下是java.util.regex.Matcher.reset(CharSequence input)方法的声明。 public Matcher reset(CharSequence input)
描述 (Description) java.util.regex.Pattern.split(CharSequence input)方法将给定的输入序列围绕此模式的匹配进行拆分。 声明 (Declaration) 以下是java.util.regex.Pattern.split(CharSequence input)方法的声明。 public String[] split(CharSequence