Package com.google.protobuf
Class ByteBufferWriter
java.lang.Object
com.google.protobuf.ByteBufferWriter
Utility class to provide efficient writing of
ByteBuffers to OutputStreams.-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final ThreadLocal<SoftReference<byte[]>>Keeping a soft reference to a thread-local buffer.private static final floatThe fraction of the requested buffer size under which the buffer will be reallocated.private static final longprivate static final Class<?>This is a hack for GAE, whereFileOutputStreamis unavailable.private static final intMaximum size for a cached buffer.private static final intMinimum size for a cached buffer. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescription(package private) static voidFor testing purposes only.private static byte[]private static longgetChannelFieldOffset(Class<?> clazz) private static byte[]getOrCreateBuffer(int requestedSize) private static booleanneedToReallocate(int requestedSize, int bufferLength) private static Class<?>safeGetClass(String className) private static voidsetBuffer(byte[] value) (package private) static voidwrite(ByteBuffer buffer, OutputStream output) Writes the remaining content of the buffer to the given stream.private static booleanwriteToChannel(ByteBuffer buffer, OutputStream output)
-
Field Details
-
MIN_CACHED_BUFFER_SIZE
private static final int MIN_CACHED_BUFFER_SIZEMinimum size for a cached buffer. This prevents us from allocating buffers that are too small to be easily reused.- See Also:
-
MAX_CACHED_BUFFER_SIZE
private static final int MAX_CACHED_BUFFER_SIZEMaximum size for a cached buffer. If a larger buffer is required, it will be allocated but not cached.- See Also:
-
BUFFER_REALLOCATION_THRESHOLD
private static final float BUFFER_REALLOCATION_THRESHOLDThe fraction of the requested buffer size under which the buffer will be reallocated.- See Also:
-
BUFFER
Keeping a soft reference to a thread-local buffer. This buffer is used for writing aByteBufferto anOutputStreamwhen no zero-copy alternative was available. Using a "soft" reference since VMs may keep this reference around longer than "weak" (e.g. HotSpot will maintain soft references until memory pressure warrants collection). -
FILE_OUTPUT_STREAM_CLASS
This is a hack for GAE, whereFileOutputStreamis unavailable. -
CHANNEL_FIELD_OFFSET
private static final long CHANNEL_FIELD_OFFSET
-
-
Constructor Details
-
ByteBufferWriter
private ByteBufferWriter()
-
-
Method Details
-
clearCachedBuffer
static void clearCachedBuffer()For testing purposes only. Clears the cached buffer to force a new allocation on the next invocation. -
write
Writes the remaining content of the buffer to the given stream. The bufferpositionwill remain unchanged by this method.- Throws:
IOException
-
getOrCreateBuffer
private static byte[] getOrCreateBuffer(int requestedSize) -
needToReallocate
private static boolean needToReallocate(int requestedSize, int bufferLength) -
getBuffer
private static byte[] getBuffer() -
setBuffer
private static void setBuffer(byte[] value) -
writeToChannel
- Throws:
IOException
-
safeGetClass
-
getChannelFieldOffset
-