MemoryStream: why convert to byte after readByte

前端 未结 3 694
眼角桃花
眼角桃花 2021-01-17 11:46

In this example from MS, you\'ll notice that after we read a byte from memory stream, it goes into an int which must then be converted to byte. It stikes me as strange that

相关标签:
3条回答
  • 2021-01-17 11:57

    This is not specific to Memory stream, rather it is because of the design of base class "Stream" and the reason for that is

    Return value:

    The unsigned byte cast to an Int32, or -1 if at the end of the stream.

    -1 cannot be represented using unsigned byte

    0 讨论(0)
  • 2021-01-17 12:10

    I do believe they are converting with that from int to byte in a reallllllly nice way, since ReadByte() returns an int and their byteArray is of type int[].

    0 讨论(0)
  • 2021-01-17 12:19

    When you use ReadByte If the read is successful then the current position within the stream is advanced by one byte. but its designed to return -1 if the end of the stream has been reached.

    Now this would not be a valid value for Byte (its unsigned)

    ms.Read(buf,0,lenth); here lenth is the number of bytes to read from the stream and what you get from ReadByte is first byte its not be used in the this fashion, something like

    byte[] buff = new byte[ms.Length];
    ms.Read(buff , 0, buff .Length);
    
    0 讨论(0)
提交回复
热议问题