Я использую сторонний двоичный кодировщик, который принимает OutputStream. Я получаю OutputStream из метода writeMarshallable Marshallable, подобного этому:
public void writeMarshallable(WireOut wire) {
OutputStream outputStream = wire.bytes().outputStream();
// third party code gets the outputStream, etc.
}
Реализация wire.bytes().outputStream() создает новый поток StreamingOutputStream при каждом вызове, чего я надеюсь избежать (лишнее выделение объектов, когда базовые байты не имеют фактически изменилось).
Тем не менее, я думаю о том, чтобы сохранить 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.
}
Итак, мой вопрос: является ли это разумным подходом или у вас есть более целесообразный способ?
Благодарность!!