在我的情况下,输出流基本上是FileOutputStream。因此,对于此代码:
ByteArrayOutputStream bos = (ByteArrayOutputStream) streamToEncrypt;
(其中streamToEncrypt是OutputStream)正在获得此异常:
java.lang.ClassCastException: java.io.FileOutputStream cannot be cast to java.io.ByteArrayOutputStream
我需要做的就是从这个输出流中取出字节数组。 我无权访问此级别的文件。我只有这个输出流,我必须在将其推送到文件之前进行加密
答案 0 :(得分:5)
这根本没有任何意义。
ByteArrayOutputStream将您推送到其中的数据...并将它们存储在稍后可以检索的字节数组中。
FileOutputStream接收数据......并将其推送到文件。
这是两个完全不同的类;你根本无法施放一个到另一个!就像你试图强制一个字符串成一个整数;或者说苹果变成香蕉,说“你是苹果,现在是香蕉”。根本不会工作!
所以,真正的“答案”在这里:你应该退后一步,澄清你打算如何处理你的数据;然后你使用匹配该要求的那些流。
答案 1 :(得分:0)
您不会从OutputStream
中获取字节数。你从InputStream
中取出它们。您将字节放入OutputStream
。
如果已经将字节写入OutputStream
,则为时已晚。再次打开文件并从中读取文件是访问这些数据的唯一方法。
如果要加密输出流,则应构造流并将其传递给写入流的代码。
Cipher enc = Cipher.getInstance("...");
enc.init(...);
try (OutputStream fos = Files.newOutputStream(path);
OutputStream os = new CipherOutputStream(fos, enc)) {
writingObject.write(os);
}