我正在使用采用 OutputStream 的第三方二进制编码器。我从 Marshallable 的 writeMarshallable 方法中检索 OutputStream,类似于:
public void writeMarshallable(WireOut wire) {
OutputStream outputStream = wire.bytes().outputStream();
// third party code gets the outputStream, etc.
}
wire.bytes().outputStream()的实现在每次调用时都会创建一个新的 StreamingOutputStream,这是我希望避免的(当底层 Bytes实际上没有改变时,多余的对象分配)。
也就是说,我正在考虑将 WeakReference 存储到给定的 wire.bytes() 值并检查提供的值引用(即 ==)是否与先前提供的值相同:
private WeakReference<Bytes<?>> priorBytesRef = new WeakReference<>(null);
public void writeMarshallable(WireOut wire) {
Bytes<?> bytes = wire.bytes();
if (bytes != priorBytesRef.get()) {
priorBytesRef = new WeakReference<>(bytes);
thirdPartyEncoder = EncoderFactoryExample.from(bytes.outputStream());
}
// utilize thirdPartyEncoder, etc.
}
所以我的问题是这是否是一种合理的方法,或者你们编年史的人是否有更明智的方法?
谢谢!!