Add Offset and Length to ByteArrayEntity
----------------------------------------

                 Key: HTTPCORE-258
                 URL: https://issues.apache.org/jira/browse/HTTPCORE-258
             Project: HttpComponents HttpCore
          Issue Type: Improvement
          Components: HttpCore, HttpCore NIO
         Environment: N/A
            Reporter: William R. Speirs
            Priority: Trivial


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();
     }


--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@hc.apache.org
For additional commands, e-mail: dev-h...@hc.apache.org

Reply via email to