【发布时间】:2010-09-09 08:05:57
【问题描述】:
我正在序列化c#.net 中的JPEG 图像。我只是将其转换为字节流并通过 Web 服务发送。
我观察到序列化的字节流是实际图像大小的 30 倍。谁能建议我一种更好的方法来序列化并保持相对于实际图像的大小?
【问题讨论】:
-
你是如何观察到再见流大 30 倍的?
标签: .net web-services serialization
我正在序列化c#.net 中的JPEG 图像。我只是将其转换为字节流并通过 Web 服务发送。
我观察到序列化的字节流是实际图像大小的 30 倍。谁能建议我一种更好的方法来序列化并保持相对于实际图像的大小?
【问题讨论】:
标签: .net web-services serialization
JPEG是一种压缩技术,读入后预计会大大扩展。这是文件格式的本质。尝试找到一种方法来发送原始 JPEG 文件而不先将其作为图像读取。
【讨论】:
【讨论】:
【讨论】:
免责声明:不知情的人发言
它是开放性/标准和性能之间的权衡。也许您正在使用诸如 SOAP 之类的东西,它会向数据包中添加大量协议开销字节。如果大小是一个重要的约束,请尝试将其作为纯二进制流发送...实际语法也许其他人可以加入。
【讨论】:
如果您通过网络服务发送的图像尺寸可能很大,也许您可以看看 MTOM。这是一个 WS-* 标准,用于优化带有二进制附件的消息的大小。它现在非常集成在 Axis2 或 Metro for Java 或 .NET 等堆栈中:
http://msdn.microsoft.com/en-us/library/aa528822.aspx (wse 3.0) http://msdn.microsoft.com/en-us/library/ms733742.aspx (wcf)
【讨论】:
也许只是将图像托管在 Web 服务器上,并在 Web 服务回复中发送 URL,而不是序列化图像。这也将允许客户端尽可能在本地缓存图像。
【讨论】:
为什么不将其转换为 Base64String?
byte[] arr = File.ReadAllBytes(filename);
string str = Convert.ToBase64String(arr);
另一方面,您可以通过以下方式将其更改回字节[]:
byte[] arr = Convert.FromBase64String(string);
【讨论】: