【问题标题】:Sonar issue for printStream constructor as "Remove this use of constructor" for PrintStream(outStream);printStream 构造函数的声纳问题为 PrintStream(outStream) 的“删除构造函数的这种使用”;
【发布时间】:2020-10-04 22:15:15
【问题描述】:

我正在使用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");

此代码运行,但返回一个空结果。你能帮我解决这个问题吗?

【问题讨论】:

    标签: java sonarqube pkcs#11 csr printstream


    【解决方案1】:

    假设你想编码为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

    【讨论】:

      猜你喜欢
      • 2021-04-12
      • 1970-01-01
      • 2013-08-19
      • 1970-01-01
      • 2020-04-06
      • 1970-01-01
      • 2011-07-15
      • 1970-01-01
      相关资源
      最近更新 更多