如何匹配 VBA 6/VBA 7 和 Java 8 之间的 ZLib 流?

How to match ZLib stream between VBA 6/VBA 7and Java 8?

我们能够做到以下几点。

在VBA6/VBA7:

在 Java 8(JDK 1.8 在 Tomcat 8)

当 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() 实例允许解压缩 zlib 格式 根据发布的代码示例的数据 Compression / Decompression of Strings using the deflater
  4. Java 8 已将 zlib 版本 1.2.5 集成为 java.utils.zip 的一部分 包裹。
  5. 我们已经确保我们使用的是 zlibwapi.dll 版本 1.2.5 在 VBA 方面也是如此。

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

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

  1. 这些字节似乎正在插入一些额外的 0 字节 通信时实际的压缩字节集之间 发生。这发生在 VBA 端。可能是因为一些 unicode 解释。
  2. 传送到 Java 的任何字节都完全显示 他们的代表不同。

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

的答案
  1. compress2()或compress()真的生成zlib格式吗?
  2. 哪个字符集允许我们按原样发送字节(如果有 10 字节,我们要发送 10 个字节。不是 20)。如果是 unicode,则为 0 字节 在两者之间插入(因此 10 个字节变成 20 个字节)。
  1. 是的。
  2. 不要发送字符。发送字节。