‘java.nio.charset’Java 中的包包含用于字符编码和解码的类。这CoderResult类用于确定编码或解码操作的结果。
在开始之前,我们先回顾一下字符编码和解码背后的想法CoderResult.
- 将字符从一种表示形式转换为另一种表示形式(通常从人类可读格式转换为可传输或存储的格式)的过程称为字符编码.
- 字符解码是将编码字符返回到其原始状态的相反过程。
CoderResult类是 Java NIO(新 I/O)包的一部分,用作报告由对象执行的编码操作的结果的机制。CharsetEncoder或者CharsetDecoder.
- 它提供了一种通过显示成功和失败场景来处理这些操作结果的方法。
- CoderResult 实例除了用作编码或解码操作的状态指示器之外,还可以保存有关输入和输出缓冲区中位置的额外信息。
Note: java.nio.charset package was introduced in Java 1.4 to improve character set and character encoding handling
CoderResult 的类声明
public class CoderResult extends Object
CoderResult 类声明的语法是一个可公开访问的类,并且隐式继承自 Object 类,该类是所有 Java 类的根类。
- 基本方法如equals()和toString()由扩展对象提供,因此 CoderResult 类的实例可以访问这些函数。
CoderResult 的字段
以下是 CoderResult 类提供的字段:
修饰符和类型 |
场地 |
说明 |
---|---|---|
静态CoderResult |
OVERFLOW |
溢出结果对象表明输出缓冲区中没有足够的空间。 |
静态CoderResult |
UNDERFLOW |
指示下溢的结果对象,这表明如果输入缓冲区尚未为空或已完全消耗,则需要更多输入。 |
CoderResult类的方法
以下是 CoderResult 类支持的关键方法,以确保有效处理编码和解码结果。
修饰符和类型 |
类 |
说明 |
---|---|---|
布尔值 |
isError() |
指示该对象是否代表错误情况。 |
布尔值 |
isMalformed() |
指示相关对象是否表示格式错误的输入错误。 |
布尔值 |
isOverflow() |
显示对象是否代表溢出情况。 |
布尔值 |
isUnderflow() |
显示对象是否代表下溢情况。 |
布尔值 |
isUnmappable() |
表示对象是否对应于不可映射的字符错误。 |
int |
length() |
它返回该对象(可选操作)说明的错误输入的长度。 |
静态CoderResult |
malformedForLength(int length) |
静态工厂方法,提供表达给定长度格式错误的输入错误的唯一对象。 |
空白 |
throwException() |
它抛出一个适合该对象说明的结果的异常。 |
String |
toString() |
返回说明编码器结果的字符串。 |
静态CoderResult |
unmappableForLength(int length) |
此静态工厂方法返回说明指定长度的 unmappable-character 错误的唯一结果对象。 |
CoderResult类的方法也继承自java.lang.Object类。
Java 中的示例CoderResult 类
这个Java程序使用CoderResult用于字符编码的类。对于 UTF-8 编码,它初始化一个字符集和匹配CharsetEncoder.
- 输入缓冲区中包含的字符串“GeeksforGeeks,”
- 然后输入缓冲区被编码到先前分配的输出缓冲区中。
- 要验证编码结果,请使用CoderResult对象。
Java
// Java program to demonstrate the use of CoderResult class
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.CharacterCodingException;
import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.CoderResult;
public class Coder {
// Main method
public static void main(String[] args)
{
try {
// Initialize the charset and encoder
Charset charset = Charset.forName("UTF-8");
CharsetEncoder encoder = charset.newEncoder();
// Create the input and output buffers for encoding
CharBuffer inputBuffer= CharBuffer.wrap("GeeksforGeeks");
ByteBuffer outputBuffer= ByteBuffer.allocate(20);
// Encode the input buffer into the output buffer
CoderResult result = encoder.encode(
inputBuffer, outputBuffer, true);
// Check if encoding is successful
if (result.isUnderflow()) {
// Print the output buffer
System.out.println("Encoding successful: "
+ outputBuffer.flip());
}
// Check for overflow condition
else if (result.isOverflow()) {
// Print the error message
System.err.println(
"Output buffer overflow");
}
// Check for error condition
else {
result.throwException();
}
}
// Catch the exception
catch (CharacterCodingException e) {
e.printStackTrace();
}
}
}
Encoding successful: java.nio.HeapByteBuffer[pos=0 lim=13 cap=20]
上述程序的解释:
- 为了编码 UTF-8 数据,应用程序初始化一个字符集实例和一个CharsetEncoder.
- 为了存储编码结果和输入字符串,创建了分别称为 inputBuffer 和 outputBuffer 的字符缓冲区和字节缓冲区。
- 要将输入缓冲区中的字符编码到输出缓冲区中,CharsetEncoder 的encode()方法被调用。
- 要验证编码过程的结果,请使用CoderResult对象(结果)。
- 它首先查找下溢(成功编码)、溢出(输出缓冲区空间不足)和错误。
如果编码过程成功,则翻转输出缓冲区以打印编码结果。如果输出缓冲区没有足够的空间,则会打印一条错误消息。这throwException()的方法CoderResult在编码错误的情况下触发,抛出CharacterCodingException。 catch 块处理此异常并打印堆栈跟踪。
CoderResult 类的用途
现在我们对这个类有了基本的了解,让我们看看一些实际的use-cases,以便更好地理解它。
- 结果报告:要报告字符编码和解码操作的结果,请使用CoderResult。它包含有关操作是否成功、遇到错误或遇到特定问题(例如缓冲区溢出)的详细信息
- 错误处理:CoderResult提供异常处理机制,以防编码或解码过程中出现错误。开发者可以通过调用throwException()方法抛出CharacterCodingException来优雅地处理和响应编码或解码错误
- 与字符集 API 集成:它可以轻松地与 CharsetEncoder 和 CharsetDecoder 这两个类进行交互java.nio.charset包。为了传达编码和解码尝试的结果,这些类使用 CoderResult 实例
- 状态检查:CoderResult 类提供了许多方法,包括isUnderflow()、isOverflow()、isMalformed()、 和 isUnmappable(),这使得监视编码或解码操作的进度变得容易。这些方法使开发人员可以根据特定操作的结果有条件地运行代码。
- 缓冲区管理:通过指示是否有
- 下溢(源缓冲区输入不足),
- 溢出(目标缓冲区空间不足),
- 或其他错误情况,它有助于缓冲区管理。
这有助于开发人员采取正确的步骤,例如调整缓冲区大小或自定义错误处理
相关用法
- Java java.nio.charset.CodingErrorAction用法及代码示例
- Java java.nio.charset.CharsetEncoder用法及代码示例
- Java java.nio.charset.Charset用法及代码示例
- Java java.nio.channels.spi.SelectorProvider用法及代码示例
- Java java.nio.channels.spi.AsynchronousChannelProvider用法及代码示例
- Java java.nio.channels.Selector用法及代码示例
- Java java.nio.ByteBuffer用法及代码示例
- Java java.nio.IntBuffer用法及代码示例
- Java java.nio.file.FileStore用法及代码示例
- Java java.nio.FloatBuffer用法及代码示例
- Java java.nio.file.LinkPermission用法及代码示例
- Java java.nio.ShortBuffer用法及代码示例
- Java java.nio.DoubleBuffer用法及代码示例
- Java java.nio.file.attribute.AclEntry用法及代码示例
- Java java.nio.LongBuffer用法及代码示例
- Java java.nio.file.spi.FileTypeDetector用法及代码示例
- Java java.nio.ByteOrder用法及代码示例
- Java java.nio.file.attribute.FileTime用法及代码示例
- Java java.nio.file.SimpleFileVisitor用法及代码示例
- Java java.nio.file.FileSystems用法及代码示例
- Java java.nio.CharBuffer用法及代码示例
- Java java.nio.Buffer用法及代码示例
- Java java.nio.file.FileSystem用法及代码示例
- Java java.nio.file.Paths用法及代码示例
- Java java.net.SocketException用法及代码示例
注:本文由纯净天空筛选整理自abhinav_m22大神的英文原创作品 java.nio.charset.CoderResult Class in Java。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。