2015-06-01 4 views
3

я отправляю массив байтов ASHX обработчикаПочему Request.InputStream содержит дополнительный байт?

byte[] serializedRequest = SerializeRequest(); 

var uri = new Uri(_server.ActionUrl); 
using (WebClient client = new WebClient()) 
{ 
    client.UploadData(uri, serializedRequest); 
} 

, который получен обработчиком

Dim str As Stream = context.Request.InputStream 
Dim transformation(str.Length - 1) As Byte ' here I have extra "0"-byte 
str.Position = 0 
str.Read(transformation, 0, transformation.Length) 

Как вы видите, что я должен сделать str.Length - 1 объявить массив байтов. И это в развитии. Я даже не знаю, как он будет себя вести при развертывании. Откуда берется этот байт? Является ли это надежным способом или я должен добавить несколько байтов в начале потока, чтобы рассказать, сколько байтов считывается из Request.InputStream?

ответ

2

Dim x(y) as Byte фактически означает «массив с верхней границей y (длина = y + 1)» (Arrays in VB.NET).

Dim transformation(str.Length) As Byte действительно объявляет больше массива, чем нужно, поэтому заявление str.Length - 1 верное.

В действительности нет байта с 0 значениями, потому что Stream.Read() не нужно читать поток до конца (проверить возвращаемое значение метода) и оставлять дополнительный байт со значением по умолчанию (0).

+0

Вы совершенно правы! Это мой сбой VB! спасибо –