我目前正在通过FTP传输文件的程序中工作。我以二进制形式发送文件,因为使用ASCII我无法发送特殊字符。

这是我目前的代码:

    using(BinaryReader bReader = new BinaryReader(srcStream))
    using (BinaryWriter bWriter = new BinaryWriter(destStream))
    {
        Byte[] readBytes = new Byte[1024];
        for(int i = 0; i < bReader.BaseStream.Length; i += 1024)
        {
            readBytes = bReader.ReadBytes(1024);
            bWriter.Write(readBytes);
        }
    }


我的这段代码的问题是:


它真的很慢,有没有优化的方法?
我要求EOF(EndOfFile)的方式似乎很奇怪,还有其他优雅的选择吗?


非常感谢:D

最佳答案

为什么要完全使用BinaryReader和BinaryWriter?您为什么反复询问长度?这是我现在发布过很多次的方法:

public static void CopyStream(Stream input, Stream output)
{
    byte[] buffer = new byte[8192];
    int read;
    while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
    {
        output.Write(buffer, 0, read);
    }
}


那使用了8K的缓冲区,但是您可以明显地改变它。哦,它会重用缓冲区,而不是每次都创建一个新的字节数组,这就是您的代码将要执行的操作:)(您不需要分配字节数组开头-您可以在呼叫readBytes。)

关于c# - 如何优化我的BinaryWriter?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1270996/

10-08 21:11