C#加载二进制文件

时间:2010-11-22 14:26:12

标签: c# io binaryfiles

请告诉我最好/最快的方法:

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

2)加载/读取大小为512Mb +的非常大的二进制文件。

3)当你不想考虑大小/速度但是必须做的事情时你的共同选择:将所有字节读入内存?

谢谢!!!

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

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

4 个答案:

答案 0 :(得分:4)

1)我使用资源文件而不是将其存储为许多单独的文件。

2)您可能想要流式传输数据而不是一次性读取所有数据,在这种情况下,您可以使用FileStream

3):使用ReadAllBytes

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

答案 1 :(得分:4)

1:对于非常小的文件,File.ReadAllBytes没问题。

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

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

答案 2 :(得分:2)

1:对于small,File.ReadAllBytes

2:对于Stream,Stream(FileStream)或Stream上的BinaryReader - 目的是通过更改代码连续读取小块来消除分配大量缓冲区的需要

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

另请注意,我首先尝试通过选择数据格式或压缩来最小化siE。

答案 3 :(得分:-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;
   }