2010-11-22 136 views
1

请告诉我最好的/快速的方法:C#加载二进制文件

1)加载非常小的二进制文件到内存中。例如图标;

2)加载/读取大小为512Mb +的非常大的二进制文件。 3)当你不想考虑大小/速度,但必须做的事情时,你的共同选择:将所有字节读入内存?

谢谢!!!

P.S.对不起,也许微不足道的问题。请不要关闭它;)

P.S.2。针对Java的模拟问题的Mirror;

+1

您可能会发现下面的文章感兴趣:http://www.codeproject.com/KB/files/ fastbinaryfileinput.aspx – 2010-11-22 14:29:01

回答

4

1:对于非常小的文件File.ReadAllBytes会很好。

2:对于非常大的文件和使用.net 4.0,您可以使用MemoryMapped文件。

3:如果不使用.NET 4.0比,读取数据块将是不错的选择

4

1)我会使用资源文件,而不是将其存储为大量单独的文件。

2)您可能希望流式传输数据,而不是一次全部读取,在这种情况下,您可以使用FileStream

3):使用ReadAllBytes

byte[] bytes = File.ReadAllBytes(path); 
2

1:对于小,File.ReadAllBytes

2:对于大,流(的FileStream)或在流A BinaryReader在 - 其目的是除去需要分配一个巨大的缓冲区,通过改变代码连续读取小块。

3:回去找到预期的大小;默认为最差情况(#2)

另外请注意,我会尽量减少siE首先,也许通过选择数据格式或压缩。

-1

此示例适用于两种 - 对于需要缓冲读取的大文件。

public static byte[] ReadFile(string filePath) 
{ 
    byte[] buffer; 
    FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read); 
    try 
    { 
    int length = (int)fileStream.Length; // get file length 
    buffer = new byte[1024];   // create buffer 
    int count;       // actual number of bytes read 
    int sum = 0;       // total number of bytes read 

    // read until Read method returns 0 (end of the stream has been reached) 
    while ((count = fileStream.Read(buffer, sum, length - sum)) > 0) 
     sum += count; // sum is a buffer offset for next reading 
    } 
    finally 
    { 
     fileStream.Close(); 
    } 
     return buffer; 
    } 
+0

这比File.ReadAllBytes更好(对两者都有好处);为什么发明工作? – 2010-11-22 14:35:33

+0

(这里主要的问题是需要为大文件分配一个巨大的缓冲区) – 2010-11-22 14:42:17