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)