我目前正在通过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/