下载文件时,我正在加密字节数组。但是,由于使用了网络,因此即使缓冲区阵列的大小固定为4096,数据也会动态填充。重新解密文件时,我们不使用网络,因此会不断输入4096字节。加密和解密该区域出现问题。
我想知道的是,下载时进入缓冲区的字节大小如何始终可以填充4096。
谢谢。
答案 0 :(得分:1)
显示将文件下载到的代码。
一种实现它的方法是在从网络读取数据时循环并继续将接收到的字节推入缓冲区直到其满(例如您的情况为4096),然后处理并清空缓冲区。
当您收到更多可以推送到缓冲区的数据时,您可能还必须处理这些情况。
我的两分钱...
答案 1 :(得分:1)
我想知道的是,下载时进入缓冲区的字节大小如何始终可以填充4096。
不能。 TCP API可以免费为您提供1字节以上到缓冲区大小的任何内容。
您需要修复加密和解密代码中的错误。 XY问题。
答案 2 :(得分:0)
这是我的解决方案。 您可以根据需要获取缓冲区大小。在需要时应用它。
private boolean readFully(InputStream is, byte[] data, int off, int length) {
int read;
while (length > 0) {
read = is.read(data, off, length);
if(read <=0){
return false;
}
length -= read;
off += read;
}
return true;
}