Uploaded image for project: 'Commons IO'
  1. Commons IO
  2. IO-515

Allow Specifying Initial Buffer Size of DeferredFileOutputStream

    XMLWordPrintableJSON

    Details

    • Type: Improvement
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 2.6
    • Component/s: Streams/Writers
    • Labels:
      None

      Description

      Right now the DeferredFileOutputStream uses a ByteArrayOputStream for its in memory buffer. It simply does new ByteArrayOutputStream() which initializes the ByteArrayOutputStream's internal buffer to 32B. In the case of large threshold values for in-memory buffering this can become very inefficient (Requiring 15 array doubling operations to grow to 1MB and producing an extra 1MB of garbage along the way).

      By allowing the user to specify the initial buffer size we allow them to tune how many times the array will need to double to something that meets their application's needs.

      In our testing we had an application that used a DeferredFileOutputStream to capture incoming data. Once that data was fully captured it did some fairly CPU intensive processing of the data. The ByteArrayOutputStream used by DeferredFileOutputStream was using 60% of our host's CPU simply on array copying.

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                ggregory Gary D. Gregory
                Reporter:
                blounsbury@gmail.com Brett Lounsbury
              • Votes:
                0 Vote for this issue
                Watchers:
                3 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: