将字节 [] 中的剩余字节连接到新的完整字节 []
Concat remaining bytes from a byte[] to a new full byte[]
我有一个 TCP 流进来,它填满了 256 字节[]。
从那里我处理解析消息等的字节数组
一旦我在第一个数组中达到 < 100 个字节,我想将剩余的字节添加到一个新数组,然后追加新的 256 字节数组并继续处理,这样我就不会错过消息。
public static byte[] Combine(byte[] first, byte[] second)
{
byte[] ret = new byte[first.Length + second.Length];
Buffer.BlockCopy(first, 0, ret, 0, first.Length);
Buffer.BlockCopy(second, 0, ret, first.Length, second.Length);
return ret;
}
我正在使用这个函数(取自 Jon Skeet 的 post 之一)但是出现了一个问题,即 byte[] 不断变大。
例如,如果我有 buffer[] 为 256 和 newbuff[] 为 256 并将其传递给上面的函数...我返回 512[].
现在,如果我再次传递 Combine 函数,它会将 256 添加到 512 并不断增长,这会导致一些问题,因为我正在处理相当大的 tcp 数据馈送。
关于如何提高效率的任何建议?目前我已经尝试使用这种变体,但似乎我陷入了一个圈子。
public static byte[] Combine(byte[] first, byte[] second, int srcOffset)
{
byte[] ret = new byte[first.Length -srcOffset + second.Length];
Buffer.BlockCopy(first, srcOffset, ret, 0, first.Length - srcOffset);
Buffer.BlockCopy(second, 0, ret, first.Length - srcOffset, second.Length);
return ret;
}
提前谢谢大家!
也许这过于简化了,您可以执行类似下面的操作,我个人使用带有 TCP 服务器的内存流来保存所有数据并且效果很好。
public static byte[] Combine(byte[] first, byte[] second, int srcOffset)
{
MemoryStream result = new MemoryStream();
result.Write(first, 0, first.Length);
result.Write(second, 0, srcOffset);
return result.ToArray();
}
我有一个 TCP 流进来,它填满了 256 字节[]。
从那里我处理解析消息等的字节数组
一旦我在第一个数组中达到 < 100 个字节,我想将剩余的字节添加到一个新数组,然后追加新的 256 字节数组并继续处理,这样我就不会错过消息。
public static byte[] Combine(byte[] first, byte[] second)
{
byte[] ret = new byte[first.Length + second.Length];
Buffer.BlockCopy(first, 0, ret, 0, first.Length);
Buffer.BlockCopy(second, 0, ret, first.Length, second.Length);
return ret;
}
我正在使用这个函数(取自 Jon Skeet 的 post 之一)但是出现了一个问题,即 byte[] 不断变大。
例如,如果我有 buffer[] 为 256 和 newbuff[] 为 256 并将其传递给上面的函数...我返回 512[].
现在,如果我再次传递 Combine 函数,它会将 256 添加到 512 并不断增长,这会导致一些问题,因为我正在处理相当大的 tcp 数据馈送。
关于如何提高效率的任何建议?目前我已经尝试使用这种变体,但似乎我陷入了一个圈子。
public static byte[] Combine(byte[] first, byte[] second, int srcOffset)
{
byte[] ret = new byte[first.Length -srcOffset + second.Length];
Buffer.BlockCopy(first, srcOffset, ret, 0, first.Length - srcOffset);
Buffer.BlockCopy(second, 0, ret, first.Length - srcOffset, second.Length);
return ret;
}
提前谢谢大家!
也许这过于简化了,您可以执行类似下面的操作,我个人使用带有 TCP 服务器的内存流来保存所有数据并且效果很好。
public static byte[] Combine(byte[] first, byte[] second, int srcOffset)
{
MemoryStream result = new MemoryStream();
result.Write(first, 0, first.Length);
result.Write(second, 0, srcOffset);
return result.ToArray();
}