声纳的问题为printStream构造函数为PrintStream(outStream)的“删除此构造函数的使用”;

我正在使用Java代码生成CSR,我已从在线网站journaldev.com中获取了代码

public byte[] generateCSR(final String sigAlg,final PublicKey publicKey,final PrivateKey 
privateKey,final String organisationUrl) {

final ByteArrayOutputStream outStream = new ByteArrayOutputStream();
final printstream printstream = new printstream(outStream);

final X500Name x500Name = new X500Name("CN=" + organisationUrl);

final Signature signature = Signature.getInstance(sigAlg);

signature.initSign(privateKey);

final pkcs10 pkcs10 = new pkcs10(publicKey);

pkcs10.encodeAndSign(x500Name,signature);
pkcs10.print(printstream);

return outStream.toByteArray();

如您所见,上面我使用了printstream构造函数,该构造函数将ByteArrayOutputStream作为参数。由于该声纳表示不使用此构造函数,因为该构造函数将使用系统的默认字符集,所以任何人都知道如何解决此问题?
我尝试过作为替代代码:

final Writer writer = new OutputStreamWriter(outStream,StandardCharsets.UTF_8);
final OutputStream out = new WriterOutputStream(writer,StandardCharsets.UTF_8);
final printstream printstream = new printstream(out,Boolean.FALSE,"UTF-8");

此代码运行,但是返回空结果。你能帮我这个忙吗?

iCMS 回答:声纳的问题为printStream构造函数为PrintStream(outStream)的“删除此构造函数的使用”;

假设您要编码为UTF-8,请替换

final PrintStream printStream = new PrintStream(outStream);

与此:

final PrintStream printStream = new PrintStream(outStream,true,"UTF-8");

您还需要赶上UnsupportedEncodingException。此异常永远不会发生(因为始终支持“ UTF-8”),但由于它是已检查的异常,因此您仍然需要捕获(或声明它)。


如果您不希望打印流自动刷新(即true),则可以添加

printStream.flush();

printStream.close();

return之前。我怀疑由于笨拙地尝试纠正问题而没有获得任何输出的原因是pks10.print写入的数据没有刷新到ByteArrayOutputStream

本文链接:https://www.f2er.com/2129863.html

大家都在问