2016-04-04 6 views
1

я понял, что если вы хотите прочитать X байт из NetStream, что делает:Каков правильный способ чтения из NetStream через BinaryReader?

netStream.Read(buffer, 0, X); 

не является достаточным во всех случаях, так как чтение может вернуть только часть X, так что вам не нужно в цикле, пока количество прочитанных байт равен X.

Другой пример однако завернул NetStream в BinaryReader ш, а затем продолжил:

br.Read(buffer, 0, X); 

Мой вопрос:

Действительно ли это из-за того, что NetStream теперь завернут BinaryReader, или нам все еще нужно учитывать, что Read может не возвращать все X байты и цикл, так же как и при чтении из исходного сетевого потока?

ответ

0

BinaryReader.Read(byte[], int, int) просто переадресовывает вызов базовому потоку. Семантика одинакова. Однако для этого сценария существует также вспомогательный метод BinaryReader.ReadBytes(int), который считывает определенное количество байтов, поэтому вам не нужно отслеживать, сколько байтов было прочитано самостоятельно.

+0

ИТАК BinaryReader.Read (байт [], Int, Int) без цикла в то время как "неправильно", и используя вспомогательный метод ReadBytes (INT) элегантна/правильный подход. Спасибо, что многое проясняет! – Sorv

0

я работать в этой манере:

using (NetworkStream netStream = new NetworkStream(...)) 
using (BinaryReader br = new BinaryReader(netStream)) 
{ 
    byte x; 
    do 
    { 
     try 
     { 
      x = br.ReadByte(); 
     } 
     catch (EndOfStreamException exception) 
     { 
      x = Byte.MinValue; 
     } 
    } while (x != byte.MinValue); 
}