什么';java.lang.String.getBytes()和java.nio.charset.CharsetEncoder.encode()之间的区别是什么?

什么';java.lang.String.getBytes()和java.nio.charset.CharsetEncoder.encode()之间的区别是什么?,java,Java,我正在通读的源代码,特别是: 但是,我在JavaAPI中找不到StringCodeing.encode()方法。我希望能够将其与进行比较,因为该类/方法在String.getBytes()javadoc中作为替代引用。如何找到StringCodeing类及其源代码?各自的.encode()方法之间的区别是什么?区别在于使用CharsetEncoder可以选择失败的方式;这是一节课 默认情况下,String的.getBytes()使用REPLACE。然而,CharsetEncoder的大多数使用将

我正在通读的源代码,特别是:


但是,我在JavaAPI中找不到StringCodeing.encode()方法。我希望能够将其与进行比较,因为该类/方法在String.getBytes()javadoc中作为替代引用。如何找到StringCodeing类及其源代码?各自的.encode()方法之间的区别是什么?

区别在于使用
CharsetEncoder
可以选择失败的方式;这是一节课

默认情况下,
String
.getBytes()
使用
REPLACE
。然而,
CharsetEncoder
的大多数使用将
报告
insead

您可以在末尾看到
CodingErrorAction
用法的示例

REPORT
用法的一个示例是java.nio.file。至少在Unix系统上,从
字符串创建的路径名将在写入磁盘之前进行编码;如果编码失败(例如,您使用
和system charset US-ASCII),JDK将拒绝创建该文件,您将收到一个(未选中!)
InvalidPathException


这与
File
不同,后者将创建一个谁知道是什么的文件名,以及放弃它的另一个原因…

请参阅(它不是一个公共类…)字符串编码的源代码在JDK中附带字符串。在IDE中,您可以使用
+
导航到它。
 public byte[] getBytes(Charset charset) {
         if (charset == null) throw new NullPointerException();
            return StringCoding.encode(charset, value, offset, count);
 }