将字节 [] 中的剩余字节连接到新的完整字节 []

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();
        }