private void incrPipedOutReaccessable(final ObjectOutputStream out) throws IOException {
assert (_reaccessable);
final FastMultiByteArrayOutputStream bufOut = new FastMultiByteArrayOutputStream(BUFFERING_BLOCK_SIZE);
final TeeOutputStream tee = new TeeOutputStream(out, bufOut);
final ObjectOutputStream objectOut = new NoHeaderObjectOutputStream(tee);
final XQEventDecoder decoder = _decoder;
decoder.redirectTo(objectOut);
decoder.close();
objectOut.flush();
// Because input of decoder fully read, this section required for re-object serialization, etc.
final byte[][] buf = bufOut.toMultiByteArray();
final int bufTotalSize = bufOut.size();
bufOut.clear();
final FastMultiByteArrayInputStream inputBuf = new FastMultiByteArrayInputStream(buf, BUFFERING_BLOCK_SIZE, bufTotalSize);
if(!_reaccessable) {
inputBuf.setCleanable(true);
}
final ObjectInputStream objInput = new NoHeaderObjectInputStream(inputBuf);
this._decoder = new XQEventDecoder(objInput); // replace old Decoder with fresh Decoder
}