public void writeRawBytes(final byte[] value, int offset, int length)
            throws IOException
    {
        if (limit - position >= length)
        {
            // We have room in the current buffer.
            System.arraycopy(value, offset, buffer, position, length);
            position += length;
        }
        else
        {
            // Write extends past current buffer. Fill the rest of this buffer and
            // flush.
            final int bytesWritten = limit - position;
            System.arraycopy(value, offset, buffer, position, bytesWritten);
            offset += bytesWritten;
            length -= bytesWritten;
            position = limit;
            refreshBuffer();

            // Now deal with the rest.
            // Since we have an output stream, this is our buffer
            // and buffer offset == 0
            if (length <= limit)
            {
                // Fits in new buffer.
                System.arraycopy(value, offset, buffer, 0, length);
                position = length;
            }
            else
            {
                // Write is very big. Let's do it all at once.
                output.write(value, offset, length);
            }
        }
    }
Write part of an array of bytes.
protostuff-core/src/test/java/io/protostuff/CodedOutput.java