hc-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "William R. Speirs (JIRA)" <j...@apache.org>
Subject [jira] [Created] (HTTPCORE-258) Add Offset and Length to ByteArrayEntity
Date Thu, 02 Jun 2011 15:57:50 GMT
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-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org


Mime
View raw message