为什么ASN1Object.getEncoded()在BouncyCastle中抛出IOException?

时间:2016-06-29 22:51:03

标签: java exception bouncycastle

ASN1Object(以及所有继承它的类)都有一个getEncoded()方法,该方法应该返回DER / BER编码。但是它被标记为抛出IOException。

我希望编码在内存中完成,不会执行IO。此外,这会通过要求抛出或尝试捕获来使周围的代码复杂化。

为什么throws IOException在那里?

1 个答案:

答案 0 :(得分:0)

ASN1Object.getEncoded

public byte[] getEncoded()
    throws IOException
{
    ByteArrayOutputStream bOut = new ByteArrayOutputStream();
    ASN1OutputStream      aOut = new ASN1OutputStream(bOut);

    aOut.writeObject(this); // This is where the throws happens.

    return bOut.toByteArray();
}

ASN1OutputStream.writeObject

public void writeObject(
    ASN1Encodable obj)
    throws IOException
{
    if (obj != null)
    {
        obj.toASN1Primitive().encode(this);
    }
    else
    {
        throw new IOException("null object detected");
    }
}

除非子类覆盖getEncoded,否则此上下文中的IOException表示所涉及的一个或多个对象为空。