David Mollitor created ZOOKEEPER-3709:
-----------------------------------------

             Summary: Pre-Size Buffer in Learner Send Method
                 Key: ZOOKEEPER-3709
                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-3709
             Project: ZooKeeper
          Issue Type: Improvement
            Reporter: David Mollitor


{code:java|title=Learner.java}
    void request(Request request) throws IOException {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        DataOutputStream oa = new DataOutputStream(baos);
        oa.writeLong(request.sessionId);
        oa.writeInt(request.cxid);
        oa.writeInt(request.type);
        if (request.request != null) {
            request.request.rewind();
            int len = request.request.remaining();
            byte[] b = new byte[len];
            request.request.get(b);
            request.request.rewind();
            oa.write(b);
        }
        oa.close();
        QuorumPacket qp = new QuorumPacket(Leader.REQUEST, -1, 
baos.toByteArray(), request.authInfo);
        writePacket(qp, true);
    }
{code}

The default internal array size of {{ByteArrayOutputStream}} is 32 bytes.  It 
will be expanded as required but this operation is not optimal.  Since the 
exact size of the buffer can be pre-determined (long, int, int, request buffer 
size), it would be better to specify the array size in 
{{ByteArrayOutputStream}} before writing to it.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to