【发布时间】:2017-05-03 12:55:34
【问题描述】:
我在网上的不同地方看到了一些相互矛盾的信息,因此希望得到真正知道的人的权威回答。
假设,我正在将一些东西序列化到 avro:
class StuffToAvro {
private final Schema schema;
StuffToAvro(Schema schema) { this.schema = schema }
void apply(GenericRecord stuff, OutputStream out) {
final Encoder encoder = EncoderFactory.get.binaryEncoder(out, null);
final GenericDatumWriter writer = new GenericDatumWriter(schema);
writer.write(stuff, encoder):
}
}
问题是我是否可以/应该通过重用编码器和写入器来优化它,如果可以,正确的方法是什么:我可以预先初始化写入器并使其成为final 例如,还是必须是ThreadLocal?
关于编码器的类似问题:我应该记住前一个实例并将其传递给getBinaryEncoder 以重复使用,还是也需要ThreadLocal。
在每种情况下,如果答案是ThreadLocal,我还想知道这种优化是否值得复杂:每次创建一个全新的编写器和/或编码器而不是重复使用它们实际上是否昂贵?
另外,我认为,无论我在这里得到什么答案,也适用于阅读/解码。对吗?
欣赏任何指针。
谢谢!
【问题讨论】:
标签: java multithreading serialization avro