Некоторые из текста из документации Java отсутствуют здесь, но, как я понимаю, вы хотите метод, который считывает точно количество байт, что буфер является большим , или сбой с каким-либо исключением.
BinaryReader.ReadBytes
(предложенный No One) не ведет себя так:
байтовый массив, содержащий данные, считанные из основного потока. Этот может быть меньше количества запрошенных байтов, если достигнут конец потока .
Насколько я знаю, нет никакого другого способа с эквивалентным поведением, но вы можете создать его с extension method:
public static void ReadFully(this Stream stream, byte[] buffer)
{
int offset = 0;
int readBytes;
do
{
// If you are using Socket directly instead of a Stream:
//readBytes = socket.Receive(buffer, offset, buffer.Length - offset,
// SocketFlags.None);
readBytes = stream.Read(buffer, offset, buffer.Length - offset);
offset += readBytes;
} while (readBytes > 0 && offset < buffer.Length);
if (offset < buffer.Length)
{
throw new EndOfStreamException();
}
}
Вы можете использовать этот метод расширения, как если бы она была частью класс Stream
, если вы импортировали пространство имен, оно определено в:
byte[] buffer = new byte[8192];
myNetworkStream.ReadFully(buffer);