2012-01-18 6 views
3

Использование .Net, я хочу передать некоторые двоичные данные (некоторые сериализованные объекты) через HttpWebRequest.Передача двоичных данных через HttpWebRequest

Могу я просто поместить его в поток запросов или мне нужно его закодировать в строку base64?

Я имею в виду, если у меня есть:

byte[] data = new byte[1000]; 
GetSomeStrangeData(data); 

мне нужно использовать Convert.ToBase64String или я могу просто написать его в поток из HttpWebRequest.GetRequestStream ли?


для потомков:

http://tools.ietf.org/html/rfc2616

http://msdn.microsoft.com/en-us/library/d4cek6cc.aspx

http://www.wireshark.org/

http://www.fiddler2.com

+0

Почему вы создали 1000-байтовый массив и затем отбросили его? –

+0

@JohnSaunders, потому что я небрежно писал вопрос. Я отредактировал –

+0

«Некоторые сериализованные объекты» означают «new BinaryFormatter(). Serialize (...)'? Не храните такие данные или не отправляйте их на другой компьютер. Формат бинарной сериализации .NET изменяется между аппаратным и .NET-версией. –

ответ

4

Если вы записываете свои данные в поток через HttpWebRequest.GetRequestStream, вы будете отправлять чистые двоичные данные без каких-либо преобразований в base64. Вам придется проанализировать данные на принимающей стороне как двоичный поток.

В качестве побочного примечания я также всегда удаляюсь от base64 при отправке данных по сети, потому что это увеличит пропускную способность для передачи данных. За каждые 3 байта, которые вы конвертируете в base64, выйдут 4. Таким образом, у вас есть 33% накладных расходов для всех ваших данных.

РЕДАКТИРОВАТЬ: Идём здесь немного глубже для Хеллфрота. HttpWebRequest.GetRequestStream позволяет получить более низкий уровень доступа к потоку, который в свою очередь позволяет отправлять двоичные данные по соединению. Если вы пытаетесь отправить данные на веб-сервер, я бы предложил вам изучить пост-данные и multipart/form-data. Вы можете узнать больше об этом здесь: Upload files with HTTPWebrequest (multipart/form-data)

+0

здесь тоже: http://msdn.microsoft.com/ en-us/library/d4cek6cc.aspx Поскольку HTTP предназначен для текста, это означает, что нужно преобразовать его данные в текстовое представление ... –

+0

HTTP-протокол широко используется на веб-сайтах для передачи текстовых данных, но в тот момент, когда он передается вам, данные - это всего лишь двоичные данные. Я обновил свой ответ более подробно. – DanielG

0

Streams чтения и записи двоичных. GetRequestStream возвращает поток.

+0

Будет ли запись моего массива в этот конкретный поток, просто закончит тем, что записывает буфер в сетевой поток, или он будет преобразован в base64? –

+0

Потоки просто читают и записывают двоичные файлы. Это абстракция ввода-вывода самого низкого уровня. Они ничего не конвертируют. –

+0

Это глупость ... LOT потока объекта манипулирует данными, переданными им, например. Сжатие ... Поскольку исходные двоичные данные, такие как значение 0 (а не текст), проблематичны с HTTP, я ожидаю, что оно будет преобразовано. –

Смежные вопросы