【发布时间】:2015-10-09 00:42:37
【问题描述】:
目前我有这段代码,它通过网络接收信息,将其存储到内存字节数组中,然后通过 FileStream 将其写出。
StreamReader reader = new StreamReader(tcpClient.GetStream());
// first message is file size
string cmdFileSize = reader.ReadLine();
// first message is filename
string cmdFileName = reader.ReadLine();
int length = Convert.ToInt32(cmdFileSize);
byte[] buffer = new byte[length];
int received = 0;
int read = 0;
int size = 1024;
int remaining = 0;
while (received < length)
{
remaining = length - received;
if (remaining < size)
{
size = remaining;
}
read = tcpClient.GetStream().Read(buffer, received, size);
received += read;
if (read < size)
{
break;
}
}
在此之后,“缓冲区”通过 FileStream 写入文件。这很好用,但是当我有很大的文件时,显然会占用大量内存。我想将这些文件直接流式传输到磁盘,而不是写入内存然后将它们重写到硬盘驱动器。
我该怎么做?
【问题讨论】:
-
如果你想写入文件而不是hostprojects.net/snippets/cs/76/…
-
@MethodMan 是的,你可以使用 StreamReader 来做到这一点,但我认为底层代码最终可能会使用缓冲区。
-
您可以尝试这样的操作,以确保对于较大的文件,您可以将
1024的大小乘以这样的byte[] buffer = new byte[16 * 1024]; -
例如,我使用了一种在从 ResponseStream 读取时执行类似操作的方法。您想查看我正在使用的方法吗?您只需要稍微改变它以适用于您的用例..
标签: c# .net sockets file-transfer