0

我正在将 .Net/C# 客户端写入 Solaris 上的 Java 服务器。

Java 服务器正在以我需要提取的 Gziped 格式写入原始字节数据,但我无法以正确的缓冲区大小读取数据。我阅读的消息不是确定性的不完整或完整的,无论如何都无法阅读第二条消息。我正在使用具有 DataAvailable 属性的 NetworkStream 类读取字节。

我的猜测是它可能与一个小/大端问题有关。我是否需要使用特殊的转换将数据从大端转换为小端?我是否需要使用 gzip 标头读取必要的字节?

我以前使用带有未压缩协议的同一服务器,之前使用带有 ReadLine 函数的 StreamReader 没有问题,但该协议是纯文本的。

编辑:不幸的是,我别无选择,因为给出了远程服务器和协议。是 GZip 格式的结尾部分还是我只需要相应地转换标题?未压缩的数据是纯 UTF8 编码的字符串,以换行符作为分隔符。

4

1 回答 1

2

GZIP 格式并不复杂。它可以在一个简单、可访问的规范文档 IETF RFC 1952中充分利用。

GZIP 格式指定字节的位顺序。它不能使用字节顺序标志进行调整。GZIP 流的生产者负责遵守这方面的规范,同样,GZIP 流的消费者也是如此。

如果我正在调试它,我会查看线路两端的字节并验证输入的字节是否与输出的字节相同。这足以抛开字节序问题。

如果您没有成功传输 GZIP 字节流,请尝试传输测试数据 - 16 个字节的 0xFF,然后是 16 个字节的 0xAA,等等。然后,验证这是来自另一端的数据。

对不起,我不知道你的意思是 我读到的消息不是确定性的不完整或完整的,无论如何都无法阅读第二条消息。 第二条消息?第二条信息是什么?字节序不应影响您收到的数据量。

在我看来,您对成功传输数据没有信心。我建议您在处理字节序问题和 GZIP 格式问题之前验证这一点。

于 2009-05-12T23:55:37.800 回答