通过 Web 服务以字节数组形式发送文件时会产生多少额外开销?
-
08-06-2019 - |
题
这 问题和答案 演示如何通过 XML Web 服务以字节数组形式发送文件。使用这种方式进行文件传输会产生多少开销?我假设数据看起来像这样:
<?xml version="1.0" encoding="UTF-8" ?>
<bytes>
<byte>16</byte>
<byte>28</byte>
<byte>127</byte>
...
</bytes>
如果此格式正确,则必须首先将字节转换为 UTF-8 字符。每个字符分配 8 个字节。字节是以 10 为基数、十六进制还是二进制字符存储的?由于 XML 数据和字符编码,文件在发送时显得大了多少?Web 服务中是否内置了压缩功能?
解决方案
通常,字节数组作为 base64
编码字符串,而不是标签中的单个字节。
http://en.wikipedia.org/wiki/Base64
这 base64
编码版本是关于 137% 原始内容的大小。
其他提示
我将这种方法用于一些内部企业网络服务,并且我没有注意到任何重大的速度下降(但这并不意味着它不存在)。
您可能可以使用众多网络流量分析工具中的任何一个来测量数据的大小,并据此做出判断。
我不确定所有细节(压缩、编码等),但我通常只使用 WireShark 分析网络流量(同时尝试各种方法),然后您可以准确地看到它是如何发送的。
例如,如果它被压缩,则数据包的数据块不应该以纯文本形式读取...但是,如果它未压缩,您只会看到纯旧的 xml 文本...就像您在 HTTP 流量甚至 FTP 中看到的那样在某些情况下。
为了回应 Kevin 所说的,在 .net Web 服务中,如果您有一个字节数组,则默认情况下它会作为 Base64 编码字符串发送。您还可以预先指定字节数组的编码。
显然,一旦它到达服务器(或客户端),您需要手动将字符串解码回字节数组,因为不幸的是,这不会自动为您完成。
主要的性能影响不是来自编码文件的传输,而是来自服务器在传输前对文件进行编码的处理(除非文件不经常更改并且编码文件)版本可以以某种方式缓存)。