opendj-sdk/opendj-core/src/main/java/org/forgerock/opendj/io/ASN1OutputStreamWriter.java
@@ -31,6 +31,7 @@ import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; import org.forgerock.i18n.LocalizableMessage; import org.forgerock.i18n.slf4j.LocalizedLogger; import org.forgerock.opendj.ldap.ByteSequence; @@ -42,6 +43,8 @@ * An ASN1Writer implementation that outputs to an outputstream. */ final class ASN1OutputStreamWriter extends AbstractASN1Writer { /** Initial size of internal buffers. */ private static final int BUFFER_INIT_SIZE = 32; private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass(); @@ -63,7 +66,7 @@ ASN1OutputStreamWriter(final OutputStream stream, final int maxBufferSize) { this.out = stream; this.rootStream = stream; this.maxBufferSize = maxBufferSize; this.maxBufferSize = Math.max(maxBufferSize, BUFFER_INIT_SIZE); this.streamStack = new ArrayList<ByteStringBuilder>(); this.stackDepth = -1; } @@ -128,7 +131,7 @@ logger.trace("WRITE ASN.1 END SEQUENCE(length=%d)", childStream.length()); childStream.clearAndTruncate(maxBufferSize, maxBufferSize); childStream.clearAndTruncate(maxBufferSize, BUFFER_INIT_SIZE); return this; } @@ -333,7 +336,7 @@ // Make sure we have a cached sub-stream at this depth if (stackDepth >= streamStack.size()) { final ByteStringBuilder subStream = new ByteStringBuilder(); final ByteStringBuilder subStream = new ByteStringBuilder(BUFFER_INIT_SIZE); streamStack.add(subStream); out = subStream.asOutputStream(); } else { opendj-sdk/opendj-core/src/main/java/org/forgerock/opendj/ldap/ByteStringBuilder.java
@@ -253,6 +253,13 @@ int length; /** * The lazily allocated output stream view of this builder. Synchronization * is not necessary because the stream is stateless and race conditions can * be tolerated. */ private OutputStreamImpl os; /** * Creates a new byte string builder with an initial capacity of 32 bytes. */ public ByteStringBuilder() { @@ -668,8 +675,10 @@ * this byte string builder. */ public OutputStream asOutputStream() { // Is it worth caching this? return new OutputStreamImpl(); if (os == null) { os = new OutputStreamImpl(); } return os; } /** opendj-sdk/opendj-grizzly/src/main/java/org/forgerock/opendj/grizzly/ASN1BufferWriter.java
@@ -50,17 +50,14 @@ final class ASN1BufferWriter extends AbstractASN1Writer implements Cacheable { private class ChildSequenceBuffer implements SequenceBuffer { private SequenceBuffer parent; private ChildSequenceBuffer child; private final ByteStringBuilder buffer = new ByteStringBuilder(BUFFER_INIT_SIZE); public SequenceBuffer endSequence() throws IOException { writeLength(parent, buffer.length()); parent.writeByteArray(buffer.getBackingArray(), 0, buffer.length()); buffer.clearAndTruncate(DEFAULT_MAX_INTERNAL_BUFFER_SIZE, BUFFER_INIT_SIZE); logger.trace("WRITE ASN.1 END SEQUENCE(length=%d)", buffer.length()); return parent; } @@ -69,10 +66,8 @@ child = new ChildSequenceBuffer(); child.parent = this; } buffer.append(type); child.buffer.clear(); return child; } @@ -130,11 +125,9 @@ child = new ChildSequenceBuffer(); child.parent = this; } outBuffer.ensureAdditionalCapacity(1); outBuffer.put(type); child.buffer.clear(); return child; } @@ -162,9 +155,17 @@ private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass(); /** * Initial size of newly created buffers. */ private static final int BUFFER_INIT_SIZE = 1024; /** * Default maximum size for cached protocol/entry encoding buffers. */ private static final int DEFAULT_MAX_INTERNAL_BUFFER_SIZE = 32 * 1024; /** * Reset the writer. */ void reset() { @@ -177,7 +178,6 @@ private SequenceBuffer sequenceBuffer; private RecyclableBuffer outBuffer; private final RootSequenceBuffer rootBuffer; /**