当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Java java.nio.charset.CoderResult用法及代码示例


‘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(),这使得监视编码或解码操作的进度变得容易。这些方法使开发人员可以根据特定操作的结果有条件地运行代码。
  • 缓冲区管理:通过指示是否有
    • 下溢(源缓冲区输入不足),
    • 溢出(目标缓冲区空间不足),
    • 或其他错误情况,它有助于缓冲区管理。

这有助于开发人员采取正确的步骤,例如调整缓冲区大小或自定义错误处理



相关用法


注:本文由纯净天空筛选整理自abhinav_m22大神的英文原创作品 java.nio.charset.CoderResult Class in Java。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。