我是否需要在我的Web服务中使用Base 64进行编码?

时间:2009-11-03 09:41:34

标签: web-services encoding mobile base64

我正在通过网络服务向移动设备传输消息。数据是一个xml字符串,我使用GZipStream进行压缩,然后使用Base64进行编码。 我在模拟器中获得了内存异常并希望优化进程,因此我已经停止按值传递字符串并删除了字节数组的不必要副本。 现在我想知道Base64编码。它增加了消息的大小,处理和内存要求。这是绝对必要的吗?

编辑:这是我如何解压缩:

public static byte[] ConvertMessageStringToByteArray(ref string isXml)
{
  return fDecompress(Convert.FromBase64String(isXml));
}

public static byte[] fDecompress(byte[] ivBytes)
{
  const int INT_BufferSize = 2048;

  using (MemoryStream lvMSIn = new MemoryStream(ivBytes))
  using (GZipInputStream lvZipStream = new GZipInputStream(lvMSIn, ivBytes.Length))
  using (MemoryStream lvMSOut = new MemoryStream())
  {
    byte[] lvBuffer = new byte[INT_BufferSize];
    int liSize;
    while (true)
    {
      liSize = lvZipStream.Read(lvBuffer, 0, INT_BufferSize);
      if (liSize <= 0)
        break;

      lvMSOut.Write(lvBuffer, 0, liSize);
    }

    return lvMSOut.ToArray();
  }
}

1 个答案:

答案 0 :(得分:1)

gzip(位于GZipStream中)生成二进制数据 - 它们不适合7位文本消息(SOAP是文本消息),除非你对它们执行类似base64编码的操作。

也许解决方案是不是gzip / encode(decode / ungzip)整个缓冲区,而是使用流 - 将gzipping流连接到编码流并从后者的输出中读取结果(或连接解码流到unngzipping流)。这样你就有机会消耗更少的内存。