Garret Wilson created IMAGING-280:
-------------------------------------

             Summary: Length specifier for ByteSourceArray.
                 Key: IMAGING-280
                 URL: https://issues.apache.org/jira/browse/IMAGING-280
             Project: Commons Imaging
          Issue Type: Improvement
            Reporter: Garret Wilson


Many of the library processing methods take a {{ByteSource}}. The 
{{ByteSourceArray}} allows a byte source from an array of bytes, but 
unfortunately it does not allow specification of the number of bytes, assuming 
that the entire byte array is used; e.g.:

{code:java}
    public ByteSourceArray(final byte[] bytes) {
        this(null, bytes);
    }
{code}

This severely impedes the use of the class if the code using 
{{ByteSourceArray}} has a byte array partially filled. The obvious case is 
processing data in a pipeline, when the producer has written to a 
{{ByteArrayOutputStream}}. Although {{ByteArrayOutputStream.toByteArray()}} 
provides a copy of the internal data, it is possible to subclass 
{{ByteArrayOutputStream}} to get access to the underlying bytes to prevent 
copying. Because {{ByteArrayOutputStream}} grows dynamically, the internal byte 
array may not be full.

Thus {{ByteSourceArray}} needs a separate constructor to indicate the length 
(and even the offset), just like {{ByteArrayInputStream}} does:

{code:java}
public ByteArrayInputStream(byte buf[], int offset, int length) {…}
{code}

Moreover this is extremely trivial to add. Without it, however, the developer 
is forced to basically reimplement the entire class.



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

Reply via email to