大字节数组分片
大字节数组分片,依据n*n>=len(data)。
Code
private byte[] SplitByteArray(byte[] originbyte, int originstartindex, int destbytelength, int destbytestartindex = 0)
{
byte[] result = new byte[destbytelength];
System.Array.Copy(originbyte, originstartindex, result, destbytestartindex, destbytelength);
return result;
}
int byte_count = 0;
int split_i = 0;
int split_n = 0;
int serving_size = 0;
int tail_size = 0;
IEnumerator SenderFile()
{
while (!stop)
{
//EncodeBytes();
if (onSender)
{
if (glimg_byte_arr.Length <= MaxOneSplit)
{
EncodeBytes(glimg_byte_arr);
}
else
{
byte[] out_little_byte;
if (split_i == split_n)
{
out_little_byte = SplitByteArray(glimg_byte_arr, byte_count, tail_size, 0);
onSender = false;
}
else {
out_little_byte = SplitByteArray(glimg_byte_arr, byte_count, serving_size, 0);
byte_count += serving_size;
}
EncodeBytes(out_little_byte);
split_i++;
}
}
yield return null;
}
}
// campute split n
split_n = Convert.ToInt32(Math.Ceiling(Math.Sqrt(Convert.ToDouble(bytes.Length))));
double ssize = (bytes.Length / split_n);
serving_size = Convert.ToInt32(Math.Floor(ssize));
tail_size = Convert.ToInt32(bytes.Length % split_n);