<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body>
    On 02/04/2025 19:04, Engebretson, John wrote:<br>
    <blockquote type="cite" cite="mid:e2e89ab7c6cc45adb5d05cdb06827ba0@amazon.com">
      
      <meta name="Generator" content="Microsoft Word 15 (filtered medium)">
      <style>@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}span.EmailStyle18
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}span.EmailStyle19
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}span.EmailStyle20
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}span.EmailStyle21
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}span.EmailStyle22
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}span.EmailStyle26
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}span.EmailStyle27
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}div.WordSection1
        {page:WordSection1;}ol
        {margin-bottom:0in;}ul
        {margin-bottom:0in;}</style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
      <div class="WordSection1">
        <p class="MsoNormal">  Apologies, human error – here’s the
          message I intended:<br>
          <br>
            Thank you!  I’ve updated the PR accordingly and summarized
          the benchmarks in the description.  Here’s the short version:<o:p></o:p></p>
        <ul style="margin-top:0in" type="disc">
          <li class="MsoListParagraph" style="margin-left:0in;mso-list:l0 level1 lfo1">For small
            payloads, unsynchronized and optimized versions are 2-4x
            faster than base<o:p></o:p></li>
          <li class="MsoListParagraph" style="margin-left:0in;mso-list:l0 level1 lfo1">For large
            payloads, optimized version is 3x faster than base or
            unsynchronized<o:p></o:p></li>
        </ul>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">  I discovered a capacity-related
          incompatibility between ByteArrayOutputStream and
          MemoryOutputStream: the size() method returns int, but
          MemoryOutputStream can exceed that value.  I added range
          checking to size() and a new sizeAsLong() method… but it
          really makes me wonder MemoryOutputStream belongs as a
          subclass of ByteArrayOutputStream.  It now has two significant
          incompatibilities: ignoring the protected fields, and size
          restrictions.</p>
      </div>
    </blockquote>
    <br>
    The protected fields are only accessible to subclasses so it's not
    an issue. BAOS::toByteArray (in addition to size) means the entire
    content must fit into a byte[]. A sink capable of accumulating but
    bytes that this is a different API.<br>
    <br>
    I think we should at least pursue
    ByteArrayOutputStream.unsynchronized(int cap) and work through the
    javadoc changes to allow that. It does not need to use buf, we have
    flexibility on how the bytes are buffered.<br>
    <br>
    -Alan<br>
    <br>
    <br>
  </body>
</html>