diff options
author | Robert Godfrey <rgodfrey@apache.org> | 2008-04-16 08:30:53 +0000 |
---|---|---|
committer | Robert Godfrey <rgodfrey@apache.org> | 2008-04-16 08:30:53 +0000 |
commit | 1b8730c44f1158cf13706533ea065877e9189a3c (patch) | |
tree | 95ffb03d26504573be4e1d60107d585a4e865a2c | |
parent | cea42250ec300edbaa4643849017cb046621e53c (diff) | |
download | qpid-python-1b8730c44f1158cf13706533ea065877e9189a3c.tar.gz |
QPID-900 : Re-use byte[] of buffer for backing of AMQShortString
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/branches/M2.1@648617 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | java/common/src/main/java/org/apache/qpid/framing/AMQShortString.java | 35 |
1 files changed, 30 insertions, 5 deletions
diff --git a/java/common/src/main/java/org/apache/qpid/framing/AMQShortString.java b/java/common/src/main/java/org/apache/qpid/framing/AMQShortString.java index 0d78aca729..a747aaeda7 100644 --- a/java/common/src/main/java/org/apache/qpid/framing/AMQShortString.java +++ b/java/common/src/main/java/org/apache/qpid/framing/AMQShortString.java @@ -184,11 +184,22 @@ public final class AMQShortString implements CharSequence, Comparable<AMQShortSt private AMQShortString(ByteBuffer data, final int length) { - byte[] dataBytes = new byte[length]; - data.get(dataBytes); - _data = dataBytes; + if(data.isDirect() || data.isReadOnly()) + { + byte[] dataBytes = new byte[length]; + data.get(dataBytes); + _data = dataBytes; + _offset = 0; + } + else + { + + _data = data.array(); + _offset = data.arrayOffset() + data.position(); + data.skip(length); + + } _length = length; - _offset = 0; } @@ -199,6 +210,20 @@ public final class AMQShortString implements CharSequence, Comparable<AMQShortSt _data = data; } + public AMQShortString shrink() + { + if(_data.length != _length) + { + byte[] dataBytes = new byte[_length]; + System.arraycopy(_data,_offset,dataBytes,0,_length); + return new AMQShortString(dataBytes,0,_length); + } + else + { + return this; + } + } + /** * Get the length of the short string @@ -572,7 +597,7 @@ public final class AMQShortString implements CharSequence, Comparable<AMQShortSt ref = _globalInternMap.get(this); if((ref == null) || ((internString = ref.get()) == null)) { - internString = new AMQShortString(getBytes()); + internString = shrink(); ref = new WeakReference(internString); _globalInternMap.put(internString, ref); } |