Я сериализирую изображение JPEG в c # .net. Я просто конвертирую его в байтовый поток и отправляю через веб-сервис. Я заметил, что сериализованный поток байтов в 30 раз больше, чем размер реального изображения. Может кто-нибудь предложить мне лучший подход к сериализации и остаться по отношению к размеру реального изображения?
JPEG - это технология сжатия, и ожидается, что она значительно расширится после того, как вы ее прочитаете. Такова природа формата файла. Попробуйте найти способ отправить оригинальный файл JPEG, не читая его сначала как изображение.
Рассмотрите возможность использования потокового WCF . Я не заметил накладных расходов на передачу файлов через этот сервис.
MSDN:
Большие данные и потоковая передача
Может быть, просто разместить изображения на веб-сервере и отправить URL-адрес в ответе веб-службы, а не сериализованное изображение. Это также позволит клиенту кэшировать изображение локально, когда это возможно.
Почему бы не преобразовать его в Base64String?
byte[] arr = File.ReadAllBytes(filename); string str = Convert.ToBase64String(arr);
На другом конце вы можете изменить его обратно на байт [], выполнив:
byte[] arr = Convert.FromBase64String(string);
И если размер изображений, которые вы отправляете через веб-сервисы, может быть большим, возможно, вы можете взглянуть на MTOM. Это стандарт WS- * для оптимизации размера сообщения с помощью двоичных вложений. Теперь он очень интегрирован в стеки, такие как Axis2 или Metro для Java или в .NET:
http://msdn.microsoft.com/en-us/library/aa528822.aspx (вс 3,0) http://msdn.microsoft.com/en-us/library/ms733742.aspx (ВКФ)
Отказ от ответственности: говорящий не информированный человек Это компромисс между открытостью / стандартами и производительностью. Может быть, вы используете что-то вроде SOAP, которое добавляет много служебных байтов протокола к пакету данных. Если размер является жизненно важным ограничением, попробуйте отправить его в виде чистого двоичного потока ... фактический синтаксис, возможно, кто-то другой может использовать.