作者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
1F:推 stu87616:感谢回复 我原本担心的是多次直接使用BW.Write效能不好 06/20 11:35
2F:→ stu87616:才会想说先用个List来蒐集 最後一次塞进去 06/20 11:35
3F:→ stu87616:所以是直接每次都直接写进去会比较好吗? 06/20 11:35
4F:→ s3748679:痾.. 一般档案开启不是会有缓冲区吗 06/20 12:59
5F:推 stu87616:还有一个考量是..有可能还会对资料进行修改 06/20 16:28
6F:→ stu87616:希望是保留这个自由度下去实作 06/20 16:28
7F:推 s3748679:BinaryWriter有void Write(byte[ ] buffer)可以用啊 06/20 22:49
8F:→ s3748679:void Write(byte[ ] buffer, int index, int count)这个 06/20 22:50
9F:→ s3748679:也是~ 06/20 22:50
10F:→ s3748679:Stream 也有Write(byte[] buffer, int offset, int count 06/20 22:52
11F:→ s3748679:)可以用~ 06/20 22:52