@Deprecated
public void getBytes(
int srcBegin,
int srcEnd,
byte dst[],
int dstBegin) {
if (srcBegin < 0
) {
throw new StringIndexOutOfBoundsException(srcBegin);
}
if (srcEnd >
value.length) {
throw new StringIndexOutOfBoundsException(srcEnd);
}
if (srcBegin >
srcEnd) {
throw new StringIndexOutOfBoundsException(srcEnd -
srcBegin);
}
int j =
dstBegin;
int n =
srcEnd;
int i =
srcBegin;
char[] val = value;
/* avoid getfield opcode */
while (i <
n) {
dst[j++] = (
byte)val[i++
];
}
}
/**
* Encodes this {@code String} into a sequence of bytes using the named
* charset, storing the result into a new byte array.
*
* <p> The behavior of this method when this string cannot be encoded in
* the given charset is unspecified. The {@link
* java.nio.charset.CharsetEncoder} class should be used when more control
* over the encoding process is required.
*
* @param charsetName
* The name of a supported {@linkplain java.nio.charset.Charset
* charset}
*
* @return The resultant byte array
*
* @throws UnsupportedEncodingException
* If the named charset is not supported
*
* @since JDK1.1
*/
public byte[] getBytes(String charsetName)
throws UnsupportedEncodingException {
if (charsetName ==
null)
throw new NullPointerException();
return StringCoding.encode(charsetName, value, 0
, value.length);
}
/**
* Encodes this {@code String} into a sequence of bytes using the given
* {@linkplain java.nio.charset.Charset charset}, storing the result into a
* new byte array.
*
* <p> This method always replaces malformed-input and unmappable-character
* sequences with this charset's default replacement byte array. The
* {@link java.nio.charset.CharsetEncoder} class should be used when more
* control over the encoding process is required.
*
* @param charset
* The {@linkplain java.nio.charset.Charset} to be used to encode
* the {@code String}
*
* @return The resultant byte array
*
* @since 1.6
*/
public byte[] getBytes(Charset charset) {
if (charset ==
null)
throw new NullPointerException();
return StringCoding.encode(charset, value, 0
, value.length);
}
/**
* Encodes this {@code String} into a sequence of bytes using the
* platform's default charset, storing the result into a new byte array.
*
* <p> The behavior of this method when this string cannot be encoded in
* the default charset is unspecified. The {@link
* java.nio.charset.CharsetEncoder} class should be used when more control
* over the encoding process is required.
*
* @return The resultant byte array
*
* @since JDK1.1
*/
public byte[] getBytes() {
return StringCoding.encode(value, 0
, value.length);
}
只有我一个人觉得JDK里面的代码写得特别跳吗?
搜索 java 源码,只能找到 4 个文件中包含 file.encoding 的文件,也就是说,只有四个文件调用了 file.encoding 这个属性。在 java.nio.charset 包中的 Charset.java 中,这段话的意思说的很明确了。简单说就是默认字符集是在 java 虚拟机启动时决定的,依赖于 java 虚拟机所在的操作系统的区域以及字符集。代码中可以看到,默认字符集就是从 file.encoding 这个属性中获取的。
转载于:https://www.cnblogs.com/sundaymorning/p/6424108.html