Я использую сетевой протокол, построенный вокруг TcpClient
, используя BinaryReader
прочитать байты из базового NetworkStream
(и, наоборот, с помощью BinaryWriter
писать).Count байт, переданных через TcpClient NetworkStream BinaryReader/BinaryWriter
Протокол передает строки в кодировке UTF-8 и вызывает reader.ReadString()
, чтобы прочитать их из потока (используя writer.Write(someStr)
для записи).
Есть ли простой способ определить количество байтов, считанных (или записанных) в NetworkStream, без необходимости перескакивать через обручи, чтобы вычислить фактические длины байтов переданных строк?
Обратите внимание, что BinaryWriter.Write()
записывает целое число в 7 бит до фактических байтов строки, что делает любой ручной расчет дополнительно сложным.
Также обратите внимание, что NetworkStream
не поддерживает собственность Position
, так как она жалуется на то, что не сможет Seek
.
Кроме того, я хотел бы избежать введения посредников, которые должны копировать/сканировать данные в процесс чтения/записи, чтобы не влиять на производительность всей системы.
Есть ли простой, способ высокого уровня подсчета байтов, проходящий через сетевой интерфейс, без необходимости вручную учитывать кодировку и длину строк?
Что вы хотите достичь? Вы можете вставить настраиваемый поток между сетевым потоком и считывателем, который подсчитывает байты. – usr
@usr Мне просто нужно знать, сколько байт прочитано/написано - для целей отчетности. * Что-то * в стеке базового протокола должно знать количество отправленных/полученных байтов ... Я хотел бы получить эту информацию - с минимальными хлопотами. – Optimax