C# 矩阵中的行在存储到bin文件时交换

C# 矩阵中的行在存储到bin文件时交换,c#,serialization,binaryfiles,binaryreader,binarywriter,C#,Serialization,Binaryfiles,Binaryreader,Binarywriter,我将一个数据矩阵保存到bin文件中,有时(这是奇怪的部分)它交换最后一行,并显示为第三行或第四行。不一致。 该系统实时运行,存储来自放大器的数据。放大器发送样品包,在一个包中,每个(9)通道有1个样品,第9个是特殊信号 这是基本结构: using (FileStream fs = new FileStream (path, FileMode.Create)) { using (BinaryWriter bw = new BinaryWriter(fs)) { wh

我将一个数据矩阵保存到bin文件中,有时(这是奇怪的部分)它交换最后一行,并显示为第三行或第四行。不一致。 该系统实时运行,存储来自放大器的数据。放大器发送样品包,在一个包中,每个(9)通道有1个样品,第9个是特殊信号

这是基本结构:

using (FileStream fs = new FileStream (path, FileMode.Create))
{
    using (BinaryWriter bw = new BinaryWriter(fs))
    {
        while(recording)
        {
            packages = readData();
            foreach(Package package in packages) //packages of 9 floats
            {
               foreach(float sample in package)
               {
                   binaryWriter.Write(sample)
               }
            }
        }
    }
}
这就是我从bin文件中读取数据的方式

using (FileStream fs = File.OpenRead(path))
        {
            int numElems = (int)(fs.Length / sizeof(float));
            int numChannels = 9;
            numElems = numElems / numChannels;



            using (BinaryReader br = new BinaryReader(fs))
            {
                for (int col = 0; col < numElems; ++col)
                {
                    data.Add(new List<float>());
                    for (float elem = 0; elem < numChannels; ++elem)
                    {
                        data[col].Add(br.ReadSingle());
                    }
                }

            }
        }
使用(FileStream fs=File.OpenRead(path))
{
int numElems=(int)(fs.Length/sizeof(float));
int numChannels=9;
numlems=numlems/numChannels;
使用(BinaryReader br=新的BinaryReader(fs))
{
for(int col=0;col
在那里,我发现有时,特殊信号ara在chennel num 4中,而不是最后的第9个通道


有线索吗?是不是因为缺少了一些样本,整个事情都在挣扎和改变,还是。。。有什么问题吗?

没有足够的信息让我们回答。如果您正在另一个线程中录制,可能是因为您有线程错误,
包未完全填充?您的写入方法不会检查坏数据并抛出异常或记录错误,因此您无法找到答案。我建议切换到一种更加自我记录的文件格式,在这种格式中,数组大小存储在读卡器中,而不是硬编码。例如,使用
BinaryFormatter
将顺序
float
数组存储为根对象,如下所示:坏数据集中没有缺少样本。只是交换了行。文件不可能是更高级的,因为它必须在以后从MATLAB中打开。如果列有时在给定行中交换(第4列和第9列的值交换),那么这一定是
如何填充的某种缺陷。您的
BinaryWriter
代码应该按照您的
包返回的顺序正确地写入浮动。