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

时间:2015-05-10 17:43:39

标签: c# serialization tcp stream base64

我目前正在通过Gzipping传输文件然后转换为base64字符串,它运行良好但是我希望尽可能提高效率,因为我确信这不是最好的方法由于Base64导致33%的尺寸增加。

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

在空间方面做到这一点最好的方法是什么? (我试图保持文件的大小尽可能小)文件相对较小,大约100kb。我很欣赏任何见解。

1 个答案:

答案 0 :(得分:0)

如果您不想想先发送长度,您可以使用此方法 - 从连接中获取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();
    }
}