Uploaded image for project: 'HttpComponents HttpCore'
  1. HttpComponents HttpCore
  2. HTTPCORE-258

Add Offset and Length to ByteArrayEntity

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Trivial
    • Resolution: Fixed
    • None
    • 4.2-alpha1
    • HttpCore, HttpCore NIO
    • None
    • N/A

    Description

      Currently the ByteArrayEntity only has a single constructor which will only accept a byte[]. I suggest this class be extended to handle an additional constructor which takes an offset and length. I have created the following first draft of a patch to the ByteArrayEntity class. Additional changes will need to be made to the test cases and the NByteArrayEntity class as well.

      — httpcore/src/main/java/org/apache/http/entity/ByteArrayEntity.java (revision 1130603)
      +++ httpcore/src/main/java/org/apache/http/entity/ByteArrayEntity.java (working copy)
      @@ -40,6 +40,7 @@
      public class ByteArrayEntity extends AbstractHttpEntity implements Cloneable {

      protected final byte[] content;
      + protected int off, len;

      public ByteArrayEntity(final byte[] b)

      { super(); @@ -47,25 +48,43 @@ throw new IllegalArgumentException("Source byte array may not be null"); }

      this.content = b;
      + this.off = 0;
      + this.len = this.content.length;
      }

      + public ByteArrayEntity(final byte[] b, int off, int len) {
      + super();
      + if (b == null)

      { + throw new IllegalArgumentException("Source byte array may not be null"); + }

      + if (off < 0)

      { + throw new IllegalArgumentException("Offset cannot be negative"); + }

      + if(b.length - off >= len)

      { + throw new IllegalArgumentException("Length cannot be longer than byte array"); + }

      + this.content = b;
      + this.off = off;
      + this.len = len;
      + }
      +
      public boolean isRepeatable()

      { return true; }

      public long getContentLength()

      { - return this.content.length; + return this.len - this.off; }

      public InputStream getContent()

      { - return new ByteArrayInputStream(this.content); + return new ByteArrayInputStream(this.content, this.off, this.len); }

      public void writeTo(final OutputStream outstream) throws IOException {
      if (outstream == null)

      { throw new IllegalArgumentException("Output stream may not be null"); }
      • outstream.write(this.content);
        + outstream.write(this.content, this.off, this.len);
        outstream.flush();
        }

      Attachments

        1. ByteArrayEntity.diff
          2 kB
          Bill Speirs
        2. NByteArrayEntity.diff
          2 kB
          Bill Speirs
        3. TestByteArrayEntity.diff
          2 kB
          Bill Speirs

        Activity

          People

            Unassigned Unassigned
            wspeirs Bill Speirs
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: