Class ByteBufferWriter

java.lang.Object
com.google.protobuf.ByteBufferWriter

final class ByteBufferWriter extends Object
Utility class to provide efficient writing of ByteBuffers to OutputStreams.
  • Field Details

    • MIN_CACHED_BUFFER_SIZE

      private static final int MIN_CACHED_BUFFER_SIZE
      Minimum 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_SIZE
      Maximum 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_THRESHOLD
      The fraction of the requested buffer size under which the buffer will be reallocated.
      See Also:
    • BUFFER

      private static final ThreadLocal<SoftReference<byte[]>> BUFFER
      Keeping a soft reference to a thread-local buffer. This buffer is used for writing a ByteBuffer to an OutputStream when 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

      private static final Class<?> FILE_OUTPUT_STREAM_CLASS
      This is a hack for GAE, where FileOutputStream is 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

      static void write(ByteBuffer buffer, OutputStream output) throws IOException
      Writes the remaining content of the buffer to the given stream. The buffer position will 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

      private static boolean writeToChannel(ByteBuffer buffer, OutputStream output) throws IOException
      Throws:
      IOException
    • safeGetClass

      private static Class<?> safeGetClass(String className)
    • getChannelFieldOffset

      private static long getChannelFieldOffset(Class<?> clazz)