BufferOutputStream 只写入较大的数据片段,而不是在 40kb <写入



我的目标是将整个文件解密为另一个文件。

如果cypherBufStream(读取输入文件的BufferedInputStream(太小,即大约128字节,则出于某种原因,此输出循环将不会写入addmsgOut。当引入38kb及以上的较大文件时,效果很好。我一直用头撞墙想弄清楚,我很想得到一些帮助。

// Decrypt M and H using RSA encryption
OutputStream addmsgOut = new BufferedOutputStream(new FileOutputStream("message.add-msg")); 
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] piece = new byte[128];
int e;
ByteArrayOutputStream out4 = new ByteArrayOutputStream();
while ((e = cypherBufStream.read(piece)) != -1) {
out4.write(piece, 0, e);
addmsgOut.write(cipher.doFinal(out4.toByteArray()));
out4.reset();
}

BufferedOutputStream按照名称执行。它缓冲数据。。。以避免在小型写入请求上浪费CPU周期、系统调用等。

但这意味着,只有在以下情况下,数据才会写入输出(在本例中(文件:

  • 当流的缓冲区填满时
  • 当您在流上调用flush()时,或者
  • 当您在流上调用close()

另一件需要注意的事情是,您执行的write(byte[], ...)大于流的缓冲区,缓冲区中的任何内容都会被刷新,然后绕过缓冲区执行整个写入。(注意,这是特定于实现的行为…(

然而,从您的代码来看,您似乎是在(大约(128字节的块中写入BufferedOutputStream。所以我的猜测是,即使在大文件的情况下,你也不会用这段代码写出整个文件。

相关内容

  • 没有找到相关文章

最新更新