Stream自行总结的技巧,如果设置一个字节数组接收一个未知长度的流Stream

来源:互联网 发布:ubuntu下php环境搭建 编辑:程序博客网 时间:2024/05/22 01:34

一般情况下我们接受到一个流Stream stm,但是由于流是一段一段的读取的,所以无法读取到stmLength属性;

Question:如果都读不到为什么要有这个属性呢?

Because:

1.因为有SetLength方法,可以手动指定Length属性

2.StreamReaderFileStream他们可能获取到一个已知的流或byte[]或文本,那么此时这个流的长度可能就是已知可获取的,所以此时可通过Length获取到流的长度

Question:当要将流写入byte[]时如何知道一个流的长度以便确定byte[]数组的长度呢?

 

Skill:Stream有个ReadByte()的方法,是一个字节一个字节的向后读取,然后返回刚刚读取的字节的内容;由于C#byte的大小范围是0-255(JAVA-127~128),所以当读到流结尾时返回一个-1;

知道了ReadByte()的方法就可以通过一个死循环来不停向后读取获得内容;

要想得到长度也可以通过一个计数器累加获得;

Suggestion:需要对应长度的字节数组时可以考虑先用List<Byte>集合接受再ToArray()

But:感觉这样一个一个游标式向后读循环了太多次,所以性能可能下降很多,具体有空再测试,所以如果确定是文本内容那么可以直接使用StreamReader读取就好,性能会高不少

 

0 0