作者angusw (使者)
看板C_Sharp
標題Re: [問題] 寫一些小檔的表頭的作法請益
時間Thu Jun 20 11:32:40 2013
※ 引述《stu87616 (DoubleLight)》之銘言:
: 要寫一個特殊檔案表頭,檔案大小都不太大,
: 後面接續的資料也都沒有很大,
: 我現在的做法是
: List<byte> list = new List<byte>();
: byte[] writing = new byte[]
: {
: 0x00,0x00,0x00,0x00,
: 0x00,0x00,0x00,0x00,
: 0x00,0x00,0x00,0x00
: }; //(資料只是舉例)
: list.AddRange(writing);
: writing = new byte[]{................};
: .
: .
: 如此這般分成幾段把固定和非固定的資料加進list裡
: 最後一口氣用Write.(list.Array());寫進BinaryWriter裡
: 只是我對這種做法一直覺得怪怪的,
: 後來我去跑了一些效能時間測試的case
: 發現一次只有10~40筆左右的資料,先列成byte陣列還比較費時,
: 不如直接執行10~40次的list.Add
: 我原先是覺得byte[]會比較容易維護,
: list還有AddRange的特別函數可以用,照理來說多少有優勢才是
: 但似乎不是這樣,想來版上問問看這類型的case有沒有更好多作法?
byte[] writing = new byte[]
{
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00
};
就直接寫入記憶體或是檔案 不用再透過List 去組合
BinaryWriter writeBinay = new BinaryWriter(writeStream);
writeBinay.write(writing);
writeBinay.write(接下來你要的資料);
以上是我自己的想法 如果不對或是不好再請指教
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.61.49.162
推 stu87616:感謝回復 我原本擔心的是多次直接使用BW.Write效能不好 06/20 11:35
→ stu87616:才會想說先用個List來蒐集 最後一次塞進去 06/20 11:35
→ stu87616:所以是直接每次都直接寫進去會比較好嗎? 06/20 11:35
→ s3748679:痾.. 一般檔案開啟不是會有緩衝區嗎 06/20 12:59
推 stu87616:還有一個考量是..有可能還會對資料進行修改 06/20 16:28
→ stu87616:希望是保留這個自由度下去實作 06/20 16:28
推 s3748679:BinaryWriter有void Write(byte[ ] buffer)可以用啊 06/20 22:49
→ s3748679:void Write(byte[ ] buffer, int index, int count)這個 06/20 22:50
→ s3748679:也是~ 06/20 22:50
→ s3748679:Stream 也有Write(byte[] buffer, int offset, int count 06/20 22:52
→ s3748679:)可以用~ 06/20 22:52