小编bop*_*cat的帖子

如何在Storm Trident拓扑中关闭由IBackingMap实现打开的数据库连接?

我正在为我的Trident拓扑实现一个IBackingMap,以便将元组存储到ElasticSearch(我知道GitHub上已存在多个Trident/ElasticSearch集成实现,但我决定实现一个更适合我的任务的自定义实现).

所以我的实现是一个经典的工厂:

public class ElasticSearchBackingMap implements IBackingMap<OpaqueValue<BatchAggregationResult>> {

    // omitting here some other cool stuff...
    private final Client client;

    public static StateFactory getFactoryFor(final String host, final int port, final String clusterName) {

        return new StateFactory() {

            @Override
            public State makeState(Map conf, IMetricsContext metrics, int partitionIndex, int numPartitions) {

                ElasticSearchBackingMap esbm = new ElasticSearchBackingMap(host, port, clusterName);
                CachedMap cm = new CachedMap(esbm, LOCAL_CACHE_SIZE);
                MapState ms = OpaqueMap.build(cm);
                return new SnapshottableMap(ms, new Values(GLOBAL_KEY));
            }
        };
    }

    public ElasticSearchBackingMap(String host, int port, String clusterName) …
Run Code Online (Sandbox Code Playgroud)

trident apache-storm

10
推荐指数
1
解决办法
343
查看次数

字符串编码为UTF-8字节时添加空字符?

代码段:

public static void main(String[] args) {
    String s = "qwertyuiop";
    System.out.println(Arrays.toString(Charset
       .forName("UTF-8")
       .encode(s)
       .array()));
}
Run Code Online (Sandbox Code Playgroud)

打印:

[113, 119, 101, 114, 116, 121, 117, 105, 111, 112, 0]
Run Code Online (Sandbox Code Playgroud)

这似乎发生了,因为在引擎盖下,在java.nio.charset.CharsetEncoder类中,averageBytesPerChar变量对于UTF-8似乎是1.1.因此它分配11个字节而不是10个字节,如果输入字符串只包含好的旧单字节字符,我最后得到奇数空字符.

我想知道这是否记录在任何地方?

这一页:

https://docs.oracle.com/javase/7/docs/api/java/nio/charset/Charset.html#encode(java.lang.String)

没有提供有关此类行为的线索.

PS我是否正确无论如何,上述代码段最好由以下代码替换:

s.getBytes(StandardCharsets.UTF_8)
Run Code Online (Sandbox Code Playgroud)

我从它的来源看到的还修剪结果以避免那些空字符?

那么,java.nio.charset.Charset的编码(String s)应该用于什么?

java character-encoding

1
推荐指数
1
解决办法
2323
查看次数

标签 统计

apache-storm ×1

character-encoding ×1

java ×1

trident ×1