Here is the current implementation of slice in java.nio.StringCharBuffer (as
found in OpenJDK 7):
44 public CharBuffer slice() {
45 return new StringCharBuffer(str,
46 -1,
47 0,
48 this.remaining(),
49 this.remaining(),
50 this.position());
51 }
Here is the implementation of slice used for heap-based byte buffers, which is
found in java/nio/Heap-X-Buffer.java.template:
97 public $Type$Buffer slice() {
98 return new Heap$Type$Buffer$RW$(hb,
99 -1,
100 0,
101 this.remaining(),
102 this.remaining(),
103 this.position() + offset);
104 }
It appears that the slice() method fails to return the correct region of the
string for CharBuffer objects that wrap a string whenever offset is non-zero.
Here is the corrected code, with the correction in red:
44 public CharBuffer slice() {
45 return new StringCharBuffer(str,
46 -1,
47 0,
48 this.remaining(),
49 this.remaining(),
50 offset + this.position());
51 }
Is this bug limited to OpenJDK 7, or is this bug found in OpenJDK 6, JDK 6, JDK
5, and JDK 1.4? This bug might be affecting code that uses CharBuffers.