1

我们能够做到以下几点。

在 VBA 6/VBA 7 中:

  • 请参阅 32 位 zlibwapi.dll (VBA 6) 或 64 位 zlibwapi.dll (VBA 7)。
  • 调用 compress() 或 compress2() 方法来生成压缩
  • 调用 uncompress() 和 uncompress2() 方法来解压缩压缩流

在 Java 8 中(Tomcat 8 上的 JDK 1.8)

  • 有一个简单的 java 程序,使用新的 Deflater() 实例压缩数据
  • 有一个使用 Inflater() 实例解压缩的简单 Java 程序

当 VBA 发送压缩流以供 Java Servlet 解压缩或 Java Servlet 发送压缩响应数据以供 VBA 解压缩时,我们将失败。

我们知道以下事实。

  1. ZLib 提供了 3 种格式(raw、zlib 和 gzip)。
  2. zlibwapi.dll 中的方法 compress() 和 compress2() 生成 zlib 格式的压缩字节。这已在 Java decompressing array of bytes的类似线程中提到
  3. Java 端的 Inflater() 实例允许按照 使用 deflater 压缩/解压缩字符串中发布的代码示例解压缩 zlib 格式数据
  4. Java 8 将 zlib 1.2.5 版集成为 java.utils.zip 包的一部分。
  5. 我们确保我们也在 VBA 端使用 zlibwapi.dll 版本 1.2.5。

我们尝试使用十六进制编辑器来比较由 VBA 和 Java 独立生成的压缩数据的字节流。我们注意到生成的压缩数据存在一些差异。我们认为正是这种差异导致两个环境相互误解。

此外,我们认为当通信发生时,必须有一些共同的字符集来管理两个端点之间的编码/解码方案。我们甚至尝试比较 VBA 生成并与 Java Servlet 通信的字节流的十六进制代码。

  1. 在通信发生时,这些字节似乎在实际的压缩字节集之间插入了一些额外的 0 字节。这发生在 VBA 端。可能是因为一些 unicode 解释。
  2. 无论通过 Java 传递什么字节,它们的表示形式都完全不同。

我们需要修复我们独立工作的代码以相互通信并和平地压缩和解压缩。我们认为有两件事要解决 - 获取匹配的格式和使用按原样发送字节的字符集。我们正在寻求这方面专家的任何帮助,以帮助我们找到可能的解决方案的正确途径。我们需要答案

  1. compress2() 或 compress() 真的生成 zlib 格式吗?
  2. 哪个字符集允许我们按原样发送字节(如果有 10 个字节,我们想发送 10 个字节。不是 20 个)。如果它的 unicode,0 个字节被插入在中间(10 个字节因此变成 20 个字节)。
4

1 回答 1

1
  1. 是的。
  2. 不要发送字符。发送字节。
于 2017-09-04T17:54:51.193 回答