[ 
https://issues.apache.org/jira/browse/IO-400?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Henri Yandell moved LANG-897 to IO-400:
---------------------------------------

    Affects Version/s:     (was: 3.1)
                  Key: IO-400  (was: LANG-897)
              Project: Commons IO  (was: Commons Lang)

> IOUtils: add support for copying from large byte buffers
> --------------------------------------------------------
>
>                 Key: IO-400
>                 URL: https://issues.apache.org/jira/browse/IO-400
>             Project: Commons IO
>          Issue Type: New Feature
>            Reporter: Sebb
>
> Trying to write a large byte array to a FileOutputStream may cause OOME.
> This is because such output requires the use of native code, and native code 
> may need to copy the array in order to access it safely, see:
> http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/design.html#wp1265
> It might therefore be useful to have a method which writes from the byte 
> array in chunks. One can create a ByteArrayInputStream from the input, and 
> then use one of the copy() methods, but that creates an unnecessary array 
> buffer (albeit only 4k).
> There are already write methods which copy byte[] to OutputStream and char[] 
> to Writer.
> Some or all of these could be converted to use chunked output, or there could 
> be new methods to implement the chunking.
> Here is a sample implementation of a stand-alone method:
> {code}
> public static void writeChunked(byte[] data, OutputStream output) throws 
> IOException {
>     int bytes = data.length;
>     int offset = 0;
>     while(bytes > 0) {
>         int chunk = Math.min(bytes, DEFAULT_BUFFER_SIZE);
>         output.write(data, offset, chunk);
>         bytes -= chunk;
>         offset += chunk;
>     }
> }
> {code}



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Reply via email to