src/java.base/share/classes/java/lang/String.java
Print this page
*** 26,35 ****
--- 26,36 ----
package java.lang;
import java.io.ObjectStreamField;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
+ import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Formatter;
import java.util.Locale;
*** 358,377 ****
@Deprecated
public String(byte ascii[], int hibyte) {
this(ascii, hibyte, 0, ascii.length);
}
/* Common private utility method used to bounds check the byte array
* and requested offset & length values used by the String(byte[],..)
* constructors.
*/
! private static void checkBounds(byte[] bytes, int offset, int length) {
if (length < 0)
throw new StringIndexOutOfBoundsException(length);
if (offset < 0)
throw new StringIndexOutOfBoundsException(offset);
! if (offset > bytes.length - length)
throw new StringIndexOutOfBoundsException(offset + length);
}
/**
* Constructs a new {@code String} by decoding the specified subarray of
--- 359,386 ----
@Deprecated
public String(byte ascii[], int hibyte) {
this(ascii, hibyte, 0, ascii.length);
}
+ private static void checkBounds(byte[] bytes, int offset, int length) {
+ checkBounds(bytes.length, offset, length);
+ }
+
+ private static void checkBounds(ByteBuffer bytes, int offset, int length) {
+ checkBounds(bytes.capacity(), offset, length);
+ }
+
/* Common private utility method used to bounds check the byte array
* and requested offset & length values used by the String(byte[],..)
* constructors.
*/
! private static void checkBounds(int lengthOfBytes, int offset, int length) {
if (length < 0)
throw new StringIndexOutOfBoundsException(length);
if (offset < 0)
throw new StringIndexOutOfBoundsException(offset);
! if (offset > lengthOfBytes - length)
throw new StringIndexOutOfBoundsException(offset + length);
}
/**
* Constructs a new {@code String} by decoding the specified subarray of
*** 449,458 ****
--- 458,474 ----
throw new NullPointerException("charset");
checkBounds(bytes, offset, length);
this.value = StringCoding.decode(charset, bytes, offset, length);
}
+ public String(ByteBuffer bytes, int offset, int length, Charset charset) {
+ if (charset == null)
+ throw new NullPointerException("charset");
+ checkBounds(bytes, offset, length);
+ this.value = StringCoding.decode(charset, bytes, offset, length);
+ }
+
/**
* Constructs a new {@code String} by decoding the specified array of bytes
* using the specified {@linkplain java.nio.charset.Charset charset}. The
* length of the new {@code String} is a function of the charset, and hence
* may not be equal to the length of the byte array.