Java: 我需要从输出流中获取字节数组

Java: I need to get byte array out of outputstream

在我的例子中,输出流基本上是 FileOutputStream。因此对于这段代码:

ByteArrayOutputStream bos = (ByteArrayOutputStream) streamToEncrypt;

(其中 streamToEncrypt 是 OutputStream)出现此异常:

java.lang.ClassCastException: java.io.FileOutputStream cannot be cast to java.io.ByteArrayOutputStream

我需要做的就是从这个输出流中取出字节数组。 我无权访问此级别的文件。我所拥有的只是这个输出流,在将它推送到文件之前我必须对其进行加密

这根本没有任何意义。

一个 ByteArrayOutputStream 获取您推入其中的数据...并将它们存储在一个 字节数组 中,您可以稍后检索。

FileOutputStream 获取数据...并将其推送到 文件

那是两个完全不同的类;您根本无法 cast 一个到另一个!这就像您试图将 cast 一个字符串转换为一个整数;或者通过说 "you apple, now be a banana" 将苹果变成香蕉。根本行不通!

所以,真正的 "answer" 在这里:您应该退后一步,明确您打算对数据做什么;然后您使用符合该要求的流。

您不会从 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);
}