Mercurial Hosting > luan
diff src/org/eclipse/jetty/io/ByteArrayBuffer.java @ 1010:2712133d5bce
simplify Buffer code
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sun, 23 Oct 2016 22:23:50 -0600 |
parents | 3428c60d7cfc |
children | 4dc1e1a18661 |
line wrap: on
line diff
--- a/src/org/eclipse/jetty/io/ByteArrayBuffer.java Sun Oct 23 21:28:56 2016 -0600 +++ b/src/org/eclipse/jetty/io/ByteArrayBuffer.java Sun Oct 23 22:23:50 2016 -0600 @@ -31,409 +31,385 @@ */ public class ByteArrayBuffer extends AbstractBuffer { - // Set a maximum size to a write for the writeTo method, to ensure that very large content is not - // written as a single write (which may fall foul to write timeouts if consumed slowly). - final static int MAX_WRITE=Integer.getInteger("org.eclipse.jetty.io.ByteArrayBuffer.MAX_WRITE",128*1024); - final protected byte[] _bytes; + // Set a maximum size to a write for the writeTo method, to ensure that very large content is not + // written as a single write (which may fall foul to write timeouts if consumed slowly). + final static int MAX_WRITE=Integer.getInteger("org.eclipse.jetty.io.ByteArrayBuffer.MAX_WRITE",128*1024); + final protected byte[] _bytes; - protected ByteArrayBuffer(int size, int access, boolean isVolatile) - { - this(new byte[size],0,0,access, isVolatile); - } - - public ByteArrayBuffer(byte[] bytes) - { - this(bytes, 0, bytes.length, READWRITE); - } + protected ByteArrayBuffer(int size, int access, boolean isVolatile) + { + this(new byte[size],0,0,access, isVolatile); + } + + public ByteArrayBuffer(byte[] bytes) + { + this(bytes, 0, bytes.length, READWRITE); + } - public ByteArrayBuffer(byte[] bytes, int index, int length) - { - this(bytes, index, length, READWRITE); - } + public ByteArrayBuffer(byte[] bytes, int index, int length) + { + this(bytes, index, length, READWRITE); + } - public ByteArrayBuffer(byte[] bytes, int index, int length, int access) - { - super(READWRITE, NON_VOLATILE); - _bytes = bytes; - setPutIndex(index + length); - setGetIndex(index); - _access = access; - } + public ByteArrayBuffer(byte[] bytes, int index, int length, int access) + { + super(READWRITE, NON_VOLATILE); + _bytes = bytes; + setPutIndex(index + length); + setGetIndex(index); + _access = access; + } - public ByteArrayBuffer(byte[] bytes, int index, int length, int access, boolean isVolatile) - { - super(READWRITE, isVolatile); - _bytes = bytes; - setPutIndex(index + length); - setGetIndex(index); - _access = access; - } + public ByteArrayBuffer(byte[] bytes, int index, int length, int access, boolean isVolatile) + { + super(READWRITE, isVolatile); + _bytes = bytes; + setPutIndex(index + length); + setGetIndex(index); + _access = access; + } - public ByteArrayBuffer(int size) - { - this(new byte[size], 0, 0, READWRITE); - setPutIndex(0); - } + public ByteArrayBuffer(int size) + { + this(new byte[size], 0, 0, READWRITE); + setPutIndex(0); + } - public ByteArrayBuffer(String value) - { - super(READWRITE,NON_VOLATILE); - _bytes = StringUtil.getBytes(value); - setGetIndex(0); - setPutIndex(_bytes.length); - _access=IMMUTABLE; - _string = value; - } - - public ByteArrayBuffer(String value,boolean immutable) - { - super(READWRITE,NON_VOLATILE); - _bytes = StringUtil.getBytes(value); - setGetIndex(0); - setPutIndex(_bytes.length); - if (immutable) - { - _access=IMMUTABLE; - _string = value; - } - } + public ByteArrayBuffer(String value) + { + super(READWRITE,NON_VOLATILE); + _bytes = StringUtil.getBytes(value); + setGetIndex(0); + setPutIndex(_bytes.length); + _access=IMMUTABLE; + _string = value; + } + + public ByteArrayBuffer(String value,boolean immutable) + { + super(READWRITE,NON_VOLATILE); + _bytes = StringUtil.getBytes(value); + setGetIndex(0); + setPutIndex(_bytes.length); + if (immutable) + { + _access=IMMUTABLE; + _string = value; + } + } - public ByteArrayBuffer(String value,String encoding) throws UnsupportedEncodingException - { - super(READWRITE,NON_VOLATILE); - _bytes = value.getBytes(encoding); - setGetIndex(0); - setPutIndex(_bytes.length); - _access=IMMUTABLE; - _string = value; - } + public ByteArrayBuffer(String value,String encoding) throws UnsupportedEncodingException + { + super(READWRITE,NON_VOLATILE); + _bytes = value.getBytes(encoding); + setGetIndex(0); + setPutIndex(_bytes.length); + _access=IMMUTABLE; + _string = value; + } - public byte[] array() - { - return _bytes; - } + public byte[] array() + { + return _bytes; + } - public int capacity() - { - return _bytes.length; - } - - @Override - public void compact() - { - if (isReadOnly()) - throw new IllegalStateException(__READONLY); - int s = markIndex() >= 0 ? markIndex() : getIndex(); - if (s > 0) - { - int length = putIndex() - s; - if (length > 0) - { - System.arraycopy(_bytes, s,_bytes, 0, length); - } - if (markIndex() > 0) setMarkIndex(markIndex() - s); - setGetIndex(getIndex() - s); - setPutIndex(putIndex() - s); - } - } + public int capacity() + { + return _bytes.length; + } + + @Override + public void compact() + { + if (isReadOnly()) + throw new IllegalStateException(__READONLY); + int s = markIndex() >= 0 ? markIndex() : getIndex(); + if (s > 0) + { + int length = putIndex() - s; + if (length > 0) + { + System.arraycopy(_bytes, s,_bytes, 0, length); + } + if (markIndex() > 0) setMarkIndex(markIndex() - s); + setGetIndex(getIndex() - s); + setPutIndex(putIndex() - s); + } + } - @Override - public boolean equals(Object obj) - { - if (obj==this) - return true; + @Override + public boolean equals(Object obj) + { + if (obj==this) + return true; - if (obj == null || !(obj instanceof Buffer)) - return false; - - if (obj instanceof Buffer.CaseInsensitve) - return equalsIgnoreCase((Buffer)obj); - + if (obj == null || !(obj instanceof Buffer)) + return false; + + if (obj instanceof Buffer.CaseInsensitve) + return equalsIgnoreCase((Buffer)obj); + - Buffer b = (Buffer) obj; - - // reject different lengths - if (b.length() != length()) - return false; + Buffer b = (Buffer) obj; + + // reject different lengths + if (b.length() != length()) + return false; - // reject AbstractBuffer with different hash value - if (_hash != 0 && obj instanceof AbstractBuffer) - { - AbstractBuffer ab = (AbstractBuffer) obj; - if (ab._hash != 0 && _hash != ab._hash) - return false; - } + // reject AbstractBuffer with different hash value + if (_hash != 0 && obj instanceof AbstractBuffer) + { + AbstractBuffer ab = (AbstractBuffer) obj; + if (ab._hash != 0 && _hash != ab._hash) + return false; + } - // Nothing for it but to do the hard grind. - int get=getIndex(); - int bi=b.putIndex(); - for (int i = putIndex(); i-->get;) - { - byte b1 = _bytes[i]; - byte b2 = b.peek(--bi); - if (b1 != b2) return false; - } - return true; - } + // Nothing for it but to do the hard grind. + int get=getIndex(); + int bi=b.putIndex(); + for (int i = putIndex(); i-->get;) + { + byte b1 = _bytes[i]; + byte b2 = b.peek(--bi); + if (b1 != b2) return false; + } + return true; + } - @Override - public boolean equalsIgnoreCase(Buffer b) - { - if (b==this) - return true; - - // reject different lengths - if (b==null || b.length() != length()) - return false; + @Override + public boolean equalsIgnoreCase(Buffer b) + { + if (b==this) + return true; + + // reject different lengths + if (b==null || b.length() != length()) + return false; - // reject AbstractBuffer with different hash value - if (_hash != 0 && b instanceof AbstractBuffer) - { - AbstractBuffer ab = (AbstractBuffer) b; - if (ab._hash != 0 && _hash != ab._hash) return false; - } + // reject AbstractBuffer with different hash value + if (_hash != 0 && b instanceof AbstractBuffer) + { + AbstractBuffer ab = (AbstractBuffer) b; + if (ab._hash != 0 && _hash != ab._hash) return false; + } - // Nothing for it but to do the hard grind. - int get=getIndex(); - int bi=b.putIndex(); - byte[] barray=b.array(); - if (barray==null) - { - for (int i = putIndex(); i-->get;) - { - byte b1 = _bytes[i]; - byte b2 = b.peek(--bi); - if (b1 != b2) - { - if ('a' <= b1 && b1 <= 'z') b1 = (byte) (b1 - 'a' + 'A'); - if ('a' <= b2 && b2 <= 'z') b2 = (byte) (b2 - 'a' + 'A'); - if (b1 != b2) return false; - } - } - } - else - { - for (int i = putIndex(); i-->get;) - { - byte b1 = _bytes[i]; - byte b2 = barray[--bi]; - if (b1 != b2) - { - if ('a' <= b1 && b1 <= 'z') b1 = (byte) (b1 - 'a' + 'A'); - if ('a' <= b2 && b2 <= 'z') b2 = (byte) (b2 - 'a' + 'A'); - if (b1 != b2) return false; - } - } - } - return true; - } + // Nothing for it but to do the hard grind. + int get=getIndex(); + int bi=b.putIndex(); + byte[] barray=b.array(); + if (barray==null) + { + for (int i = putIndex(); i-->get;) + { + byte b1 = _bytes[i]; + byte b2 = b.peek(--bi); + if (b1 != b2) + { + if ('a' <= b1 && b1 <= 'z') b1 = (byte) (b1 - 'a' + 'A'); + if ('a' <= b2 && b2 <= 'z') b2 = (byte) (b2 - 'a' + 'A'); + if (b1 != b2) return false; + } + } + } + else + { + for (int i = putIndex(); i-->get;) + { + byte b1 = _bytes[i]; + byte b2 = barray[--bi]; + if (b1 != b2) + { + if ('a' <= b1 && b1 <= 'z') b1 = (byte) (b1 - 'a' + 'A'); + if ('a' <= b2 && b2 <= 'z') b2 = (byte) (b2 - 'a' + 'A'); + if (b1 != b2) return false; + } + } + } + return true; + } - @Override - public byte get() - { - return _bytes[_get++]; - } + @Override + public byte get() + { + return _bytes[_get++]; + } - @Override - public int hashCode() - { - if (_hash == 0 || _hashGet!=_get || _hashPut!=_put) - { - int get=getIndex(); - for (int i = putIndex(); i-- >get;) - { - byte b = _bytes[i]; - if ('a' <= b && b <= 'z') - b = (byte) (b - 'a' + 'A'); - _hash = 31 * _hash + b; - } - if (_hash == 0) - _hash = -1; - _hashGet=_get; - _hashPut=_put; - } - return _hash; - } - - - public byte peek(int index) - { - return _bytes[index]; - } - - public int peek(int index, byte[] b, int offset, int length) - { - int l = length; - if (index + l > capacity()) - { - l = capacity() - index; - if (l==0) - return -1; - } - - if (l < 0) - return -1; - - System.arraycopy(_bytes, index, b, offset, l); - return l; - } + @Override + public int hashCode() + { + if (_hash == 0 || _hashGet!=_get || _hashPut!=_put) + { + int get=getIndex(); + for (int i = putIndex(); i-- >get;) + { + byte b = _bytes[i]; + if ('a' <= b && b <= 'z') + b = (byte) (b - 'a' + 'A'); + _hash = 31 * _hash + b; + } + if (_hash == 0) + _hash = -1; + _hashGet=_get; + _hashPut=_put; + } + return _hash; + } + + + public byte peek(int index) + { + return _bytes[index]; + } + + public int peek(int index, byte[] b, int offset, int length) + { + int l = length; + if (index + l > capacity()) + { + l = capacity() - index; + if (l==0) + return -1; + } + + if (l < 0) + return -1; + + System.arraycopy(_bytes, index, b, offset, l); + return l; + } - public void poke(int index, byte b) - { - /* - if (isReadOnly()) - throw new IllegalStateException(__READONLY); - - if (index < 0) - throw new IllegalArgumentException("index<0: " + index + "<0"); - if (index > capacity()) - throw new IllegalArgumentException("index>capacity(): " + index + ">" + capacity()); - */ - _bytes[index] = b; - } - - @Override - public int poke(int index, Buffer src) - { - _hash=0; - - /* - if (isReadOnly()) - throw new IllegalStateException(__READONLY); - if (index < 0) - throw new IllegalArgumentException("index<0: " + index + "<0"); - */ - - int length=src.length(); - if (index + length > capacity()) - { - length=capacity()-index; - /* - if (length<0) - throw new IllegalArgumentException("index>capacity(): " + index + ">" + capacity()); - */ - } - - byte[] src_array = src.array(); - if (src_array != null) - System.arraycopy(src_array, src.getIndex(), _bytes, index, length); - else - { - int s=src.getIndex(); - for (int i=0;i<length;i++) - _bytes[index++]=src.peek(s++); - } - - return length; - } - + public void poke(int index, byte b) + { + /* + if (isReadOnly()) + throw new IllegalStateException(__READONLY); + + if (index < 0) + throw new IllegalArgumentException("index<0: " + index + "<0"); + if (index > capacity()) + throw new IllegalArgumentException("index>capacity(): " + index + ">" + capacity()); + */ + _bytes[index] = b; + } + + @Override + public int poke(int index, Buffer src) + { + _hash=0; + + /* + if (isReadOnly()) + throw new IllegalStateException(__READONLY); + if (index < 0) + throw new IllegalArgumentException("index<0: " + index + "<0"); + */ + + int length=src.length(); + if (index + length > capacity()) + { + length=capacity()-index; + /* + if (length<0) + throw new IllegalArgumentException("index>capacity(): " + index + ">" + capacity()); + */ + } + + byte[] src_array = src.array(); + if (src_array != null) + System.arraycopy(src_array, src.getIndex(), _bytes, index, length); + else + { + int s=src.getIndex(); + for (int i=0;i<length;i++) + _bytes[index++]=src.peek(s++); + } + + return length; + } + - @Override - public int poke(int index, byte[] b, int offset, int length) - { - _hash=0; - /* - if (isReadOnly()) - throw new IllegalStateException(__READONLY); - if (index < 0) - throw new IllegalArgumentException("index<0: " + index + "<0"); - */ - - if (index + length > capacity()) - { - length=capacity()-index; - /* if (length<0) - throw new IllegalArgumentException("index>capacity(): " + index + ">" + capacity()); - */ - } - - System.arraycopy(b, offset, _bytes, index, length); - - return length; - } - - /* ------------------------------------------------------------ */ - @Override - public void writeTo(OutputStream out) - throws IOException - { - int len=length(); - if (MAX_WRITE>0 && len>MAX_WRITE) - { - int off=getIndex(); - while(len>0) - { - int c=len>MAX_WRITE?MAX_WRITE:len; - out.write(_bytes,off,c); - off+=c; - len-=c; - } - } - else - out.write(_bytes,getIndex(),len); - if (!isImmutable()) - clear(); - } - - /* ------------------------------------------------------------ */ - @Override - public int readFrom(InputStream in,int max) throws IOException - { - if (max<0||max>space()) - max=space(); - int p = putIndex(); - - int len=0, total=0, available=max; - while (total<max) - { - len=in.read(_bytes,p,available); - if (len<0) - break; - else if (len>0) - { - p += len; - total += len; - available -= len; - setPutIndex(p); - } - if (in.available()<=0) - break; - } - if (len<0 && total==0) - return -1; - return total; - } + @Override + public int poke(int index, byte[] b, int offset, int length) + { + _hash=0; + /* + if (isReadOnly()) + throw new IllegalStateException(__READONLY); + if (index < 0) + throw new IllegalArgumentException("index<0: " + index + "<0"); + */ + + if (index + length > capacity()) + { + length=capacity()-index; + /* if (length<0) + throw new IllegalArgumentException("index>capacity(): " + index + ">" + capacity()); + */ + } + + System.arraycopy(b, offset, _bytes, index, length); + + return length; + } + + @Override + public int readFrom(InputStream in,int max) throws IOException + { + if (max<0||max>space()) + max=space(); + int p = putIndex(); + + int len=0, total=0, available=max; + while (total<max) + { + len=in.read(_bytes,p,available); + if (len<0) + break; + else if (len>0) + { + p += len; + total += len; + available -= len; + setPutIndex(p); + } + if (in.available()<=0) + break; + } + if (len<0 && total==0) + return -1; + return total; + } - /* ------------------------------------------------------------ */ - @Override - public int space() - { - return _bytes.length - _put; - } + /* ------------------------------------------------------------ */ + @Override + public int space() + { + return _bytes.length - _put; + } - - /* ------------------------------------------------------------ */ - /* ------------------------------------------------------------ */ - /* ------------------------------------------------------------ */ - public static class CaseInsensitive extends ByteArrayBuffer implements Buffer.CaseInsensitve - { - public CaseInsensitive(String s) - { - super(s); - } - - public CaseInsensitive(byte[] b, int o, int l, int rw) - { - super(b,o,l,rw); - } + + /* ------------------------------------------------------------ */ + /* ------------------------------------------------------------ */ + /* ------------------------------------------------------------ */ + public static class CaseInsensitive extends ByteArrayBuffer implements Buffer.CaseInsensitve + { + public CaseInsensitive(String s) + { + super(s); + } + + public CaseInsensitive(byte[] b, int o, int l, int rw) + { + super(b,o,l,rw); + } - @Override - public boolean equals(Object obj) - { - return obj instanceof Buffer && equalsIgnoreCase((Buffer)obj); - } - - } + @Override + public boolean equals(Object obj) + { + return obj instanceof Buffer && equalsIgnoreCase((Buffer)obj); + } + + } }