Re: [問題] 寫一些小檔的表頭的作法請益

看板C_Sharp作者 (使者)時間11年前 (2013/06/20 11:32), 編輯推噓3(308)
留言11則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《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

06/20 11:35, , 1F
感謝回復 我原本擔心的是多次直接使用BW.Write效能不好
06/20 11:35, 1F

06/20 11:35, , 2F
才會想說先用個List來蒐集 最後一次塞進去
06/20 11:35, 2F

06/20 11:35, , 3F
所以是直接每次都直接寫進去會比較好嗎?
06/20 11:35, 3F

06/20 12:59, , 4F
痾.. 一般檔案開啟不是會有緩衝區嗎
06/20 12:59, 4F

06/20 16:28, , 5F
還有一個考量是..有可能還會對資料進行修改
06/20 16:28, 5F

06/20 16:28, , 6F
希望是保留這個自由度下去實作
06/20 16:28, 6F

06/20 22:49, , 7F
BinaryWriter有void Write(byte[ ] buffer)可以用啊
06/20 22:49, 7F

06/20 22:50, , 8F
void Write(byte[ ] buffer, int index, int count)這個
06/20 22:50, 8F

06/20 22:50, , 9F
也是~
06/20 22:50, 9F

06/20 22:52, , 10F
Stream 也有Write(byte[] buffer, int offset, int count
06/20 22:52, 10F

06/20 22:52, , 11F
)可以用~
06/20 22:52, 11F
文章代碼(AID): #1HmdVRYq (C_Sharp)
文章代碼(AID): #1HmdVRYq (C_Sharp)