通过TCP传输文件的最有效方法



我当前通过gzz gzzing toke tote to to base64字符串来传输文件,它的运行良好,但是我想在可能的情况下更有效,因为我敢肯定这是不是由于基本的33%增加而不是最好的方法。

我正在考虑的其他两个选项是直接读取和编写字节或序列化对象并发送它。

在空间方面,最好的方法是什么?(我试图使文件的大小尽可能小)文件相对较小,左右左右。我感谢任何见解。

如果您不想先发送长度,则可以使用此方法 - 在获得NetworkStream对象形式的连接后 - 用于读取来自流的所有数据。同样,在您的情况下,Base64不需要,因此该解决方案可以读取通过NetworkStream从发送侧收到的字节数组。

public static byte[] ReadFully(Stream input)
{
    byte[] buffer = new byte[16*1024];
    using (MemoryStream ms = new MemoryStream())
    {
        int read;
        while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
        {
            ms.Write(buffer, 0, read);
        }
        return ms.ToArray();
    }
}

最新更新