将大字节()数组保存到文件

时间:2014-11-12 10:48:34

标签: .net vb.net byte filestream

我正在使用API​​将文档作为Byte()数组返回。我的第一个问题是Byte()数组的容量是多少?我应该确保整个文档来自API。

假设Byte()数组确实将整个文档保存在内存中,保存到本地文件夹的最有效机制是什么?

我查看了File.WriteAllBytes,但这似乎有2MB的限制。我目前正在使用:

    Dim bDocument = obj.DownloadDocument(21, oAuth) 'API call returns byte() of document
    Dim sStream As New FileStream("C:\Websites\docName.tif", FileMode.Create, FileAccess.ReadWrite)
    sStream.Write(bDocument, 0, bDocument.Length)

但我读过2GB是CLR中任何文件大小的限制。处理和保存潜在的非常大的文件的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

以下是您的问题:

  1. .NET中数组的最大元素数可以是2.147.483.647(2 ^ 31 - 1)。最大大小取决于元素的类型以及您是在32位进程还是64位进程中运行。因此,字节数组的最大大小可以是上面的数字(2GB - 1个字节)。
  2. 要从单个阵列保存到本地文件夹,请使用File.WriteAllBytes。如果您有多个阵列,请使用流并写入每个阵列
  3. File.WriteAllBytes的限制为2 MB 。单独它没有任何限制,但显然它不能写大于2GB(-1字节)的字节数组,因为在.NET中不允许这样的数组
  4. 最大文件大小由基础文件系统决定,而不是.NET / CLR。​​
  5. 附带问题:您是否考虑过将文件"直接下载到磁盘"?这意味着您将打开下载流和文件流,并通过缓冲区读取缓冲区并随时写入文件流?这意味着这里对大小的实际限制将是底层文件系统或可用空间,而不是内存。显然,只有当您从中下载的API支持流时,才能实现这一点。