0

私のプロジェクトでは、ファイルから UInt16、UInt32、Bytes、および Strings を書き込む必要があります。次のように書いた単純なクラスから始めました。

    public FileReader(string path)  //constructor
    {
        if (!System.IO.File.Exists(path))
            throw new Exception("FileReader::File not found.");

        m_byteFile = System.IO.File.ReadAllBytes(path);
        m_readPos = 0;
    }
    public UInt16 getU16()   // basic function for reading
    {
        if (m_readPos + 1 >= m_byteFile.Length)
            return 0;

        UInt16 ret = (UInt16)((m_byteFile[m_readPos + 0])
                            + (m_byteFile[m_readPos + 1] << 8));
        m_readPos += 2;
        return ret;
    }

既存の BinaryReader を使用する方が良いかもしれないと思ったので試してみましたが、私のアプローチよりも遅いことに気付きました。誰かがこれがなぜなのかを説明できますか?また、ファイルをロードしてそこから読み取るために使用できる別の既存のクラスがある場合は?

~Adura

4

1 に答える 1

1

メモリ内の配列にすべてのデータを前もって持っていBinaryReaderますが、ディスク上のファイルであると思われるソースからバイトを一度に 1 つずつストリーミングします。インメモリ配列から読み取るストリームを渡すことで、速度を上げることができると思います。

Stream stream = new MemoryStream(byteArray);
//Pass the stream to BinaryReader

このアプローチでは、一度にファイル全体をメモリに格納する必要がありますが、それで問題ないと思います。

于 2013-06-18T12:54:57.603 に答える