Java 如何使用网络[android]在文件下载中填充缓冲区
下载文件时,我正在加密字节数组。但是,由于使用了网络,因此即使缓冲区数组的大小固定为4096,也会动态填充数据。当重新解密文件时,我们不使用网络,因此4096字节不断地进入。加密和解密问题发生在这个区域 我想知道的是,下载时进入缓冲区的字节大小如何总是用4096填充Java 如何使用网络[android]在文件下载中填充缓冲区,java,android,networking,download,buffer,Java,Android,Networking,Download,Buffer,下载文件时,我正在加密字节数组。但是,由于使用了网络,因此即使缓冲区数组的大小固定为4096,也会动态填充数据。当重新解密文件时,我们不使用网络,因此4096字节不断地进入。加密和解密问题发生在这个区域 我想知道的是,下载时进入缓冲区的字节大小如何总是用4096填充 谢谢。显示下载文件的代码 实现它的一种方法是,在从网络读取数据时循环,并将接收到的字节一直推送到缓冲区,直到其满为止(例如,您的情况为4096),然后处理并清空缓冲区 当您接收到更多可以推送到缓冲区的数据时,您可能还必须处理这些情况
谢谢。显示下载文件的代码 实现它的一种方法是,在从网络读取数据时循环,并将接收到的字节一直推送到缓冲区,直到其满为止(例如,您的情况为4096),然后处理并清空缓冲区 当您接收到更多可以推送到缓冲区的数据时,您可能还必须处理这些情况 我的两分钱 我想知道的是,下载时进入缓冲区的字节大小如何总是用4096填充 不可能。TCP API可以免费为您提供从1字节到缓冲区大小的任何内容
您需要修复加密和解密代码中的错误。XY问题。我有一个解决方案。 您可以根据需要获取缓冲区大小。在需要的时候使用它
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;
}