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

时间:2016-10-04 19:02:22

标签: java outputstream fileoutputstream bytearrayoutputstream

在我的情况下,输出流基本上是FileOutputStream。因此,对于此代码:

ByteArrayOutputStream bos = (ByteArrayOutputStream) streamToEncrypt;

(其中streamToEncrypt是OutputStream)正在获得此异常:

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

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

2 个答案:

答案 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);
}