2

我需要读取文件的内容,使用 API Writer(PEMWriter - 将内容格式转换为所需格式)将它们写入输出流,然后从该输出流中重新读取新格式化的内容并存储在 String 变量中.

有人知道怎么做吗?

用代码的话来说:

PEMWriter writer = null;
Writer out = null;
Reader in = null;
String priv = null;
KeyStore ks = null;

    Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
         ks.load(new FileInputStream(MyConfig.KEYTOOL_FILE),
                 MyConfig.PASSWORD.toCharArray());
         KeyPair keyPair = getPrivateKey(ks, "myKey",
                 MyConfig.PASSWORD.toCharArray());
         PrivateKey privateKey = keyPair.getPrivate();

out = new BufferedWriter (new OutputStreamWriter(new org.apache.commons.io.output.ByteArrayOutputStream()));
writer = new PEMWriter(out);
 writer.writeObject(privateKey);
in = new  BufferedReader (new org.apache.commons.io.input.NullReader( new Long(5000).longValue()));

IOUtils.copy(in, out);

 priv = IOUtils.toString(in);

上面的代码应该可以工作,因为它有一个 Writer(out),它使用 bouncy castle api 填充了 PEMWriter 的内容。尝试使用 Reader (in) 重新读取 out 的内容并将它们存储到 String (priv) 时会出现问题。我收到一个 IO 异常,说明文件结束后读取。这发生在网上IOUtils.copy(in, out);。我很感激这个问题的一些帮助。提前致谢。

4

2 回答 2

1

您不能两次读取流或阅读器。一旦它读到最后,它就在最后(在 中完成IOUtils.copy(in, out))。然后您尝试再次阅读它(IOUtils.toString(in))。

要在一个步骤中同时写入文件和字符串,您可以使用 TeeWriter (就像这个)和 StringWriter

或者将输入复制到字符串并将字符串写入输出:

 priv = IOUtils.toString(in);
 out.wite(priv);
于 2013-05-28T22:47:02.023 回答
-1

我相信我的解决方案的答案是使用管道 - 一个作家和读者管道将两者连接在一起。这样我就可以在阅读器中读取我的输出流。我只有在尝试后才会知道,但是在研究中,这似乎是对我的问题最正确的答案,类似于

 PipedWriter pwriter = new PipedWriter();
    PipedReader preader = new PipedReader(pwriter);
于 2013-05-29T20:01:56.863 回答