changeset 52907:4b2346f5b2d5

8234841: Enhance buffering of byte buffers Reviewed-by: alanb, ahgross, rhalade, psandoz
author robm
date Mon, 30 Mar 2020 05:13:42 +0100
parents b325a53bcd1a
children d56ef487dbcb
files src/java.base/share/classes/java/nio/ByteBufferAs-X-Buffer.java.template src/java.base/share/classes/java/nio/Direct-X-Buffer.java.template src/java.base/share/classes/java/nio/Heap-X-Buffer.java.template src/java.base/share/classes/java/nio/StringCharBuffer.java
diffstat 4 files changed, 10 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/java.base/share/classes/java/nio/ByteBufferAs-X-Buffer.java.template	Wed Mar 13 11:12:22 2019 -0700
+++ b/src/java.base/share/classes/java/nio/ByteBufferAs-X-Buffer.java.template	Mon Mar 30 05:13:42 2020 +0100
@@ -79,7 +79,6 @@
     public $Type$Buffer slice() {
         int pos = this.position();
         int lim = this.limit();
-        assert (pos <= lim);
         int rem = (pos <= lim ? lim - pos : 0);
         long addr = byteOffset(pos);
         return new ByteBufferAs$Type$Buffer$RW$$BO$(bb, -1, 0, rem, rem, addr);
--- a/src/java.base/share/classes/java/nio/Direct-X-Buffer.java.template	Wed Mar 13 11:12:22 2019 -0700
+++ b/src/java.base/share/classes/java/nio/Direct-X-Buffer.java.template	Mon Mar 30 05:13:42 2020 +0100
@@ -209,7 +209,6 @@
     public $Type$Buffer slice() {
         int pos = this.position();
         int lim = this.limit();
-        assert (pos <= lim);
         int rem = (pos <= lim ? lim - pos : 0);
         int off = (pos << $LG_BYTES_PER_VALUE$);
         assert (off >= 0);
--- a/src/java.base/share/classes/java/nio/Heap-X-Buffer.java.template	Wed Mar 13 11:12:22 2019 -0700
+++ b/src/java.base/share/classes/java/nio/Heap-X-Buffer.java.template	Mon Mar 30 05:13:42 2020 +0100
@@ -102,13 +102,15 @@
     }
 
     public $Type$Buffer slice() {
-        int rem = this.remaining();
+        int pos = this.position();
+        int lim = this.limit();
+        int rem = (pos <= lim ? lim - pos : 0);
         return new Heap$Type$Buffer$RW$(hb,
                                         -1,
                                         0,
                                         rem,
                                         rem,
-                                        this.position() + offset);
+                                        pos + offset);
     }
 
 #if[byte]
--- a/src/java.base/share/classes/java/nio/StringCharBuffer.java	Wed Mar 13 11:12:22 2019 -0700
+++ b/src/java.base/share/classes/java/nio/StringCharBuffer.java	Mon Mar 30 05:13:42 2020 +0100
@@ -43,12 +43,15 @@
     }
 
     public CharBuffer slice() {
+        int pos = this.position();
+        int lim = this.limit();
+        int rem = (pos <= lim ? lim - pos : 0);
         return new StringCharBuffer(str,
                                     -1,
                                     0,
-                                    this.remaining(),
-                                    this.remaining(),
-                                    offset + this.position());
+                                    rem,
+                                    rem,
+                                    offset + pos);
     }
 
     private StringCharBuffer(CharSequence s,