【发布时间】:2017-05-23 14:07:12
【问题描述】:
我有一个超过 5 GB 的录音文件(二进制文件),我必须读取该文件并过滤掉需要发送到服务器的数据。
问题是 byte[] 数组支持直到 2GB 的文件数据。所以如果有人已经处理过这种情况,就需要帮助。
using (FileStream str = File.OpenRead(textBox2.Text))
{
int itemSectionStart = 0x00000000;
BinaryReader breader = new BinaryReader(str);
breader.BaseStream.Position = itemSectionStart;
int length = (int)breader.BaseStream.Length;
byte[] itemSection = breader.ReadBytes(length ); //first frame data
}
问题:
1: Length is crossing the range of integer.
2: tried using long and unint but byte[] only supports integer
编辑。
我想尝试的另一种方法,基于帧缓冲区读取数据,假设我的帧缓冲区大小为 24000 。所以字节数组存储那么多帧数据,然后处理帧数据,然后刷新字节数组并存储另外24000帧数据。直到二进制文件结束..
【问题讨论】:
-
你真的需要一次内存中的所有数据吗?因为听起来您应该实施一种流式方法来过滤数据。
-
是....因为必须读取文件中的特定模式并且必须对其应用过滤
-
我建议您尽可能逐位处理文件,而不是将整个文件读入内存。例如读取第一个块,过滤它,然后在读取和处理下一个块之前将其发送到服务器(或写入临时文件)。根据您正在执行的过滤类型,您可能需要多次通过。你能提供更多关于需要什么过滤的细节吗?
-
您使用的是哪个版本的 .NET 框架?
-
如果你不能让你的项目以 .NET 4.5 为目标(当然也可以在安装了 .NET 4.5+ 的机器上运行),那么你就不走运了。否则,请参阅:msdn.microsoft.com/en-us/library/hh285054(v=vs.110).aspx
标签: c# visual-studio-2008 c#-3.0