我正在将一个.Net / C#客户端写入Solaris上的Java服务器。
Java服务器正在以Gziped格式写入Raw字节数据,我需要提取它,但是我无法以正确的缓冲区大小读取数据。我读取的信息不确定,不完整或完整,无论如何都无法读取第二条消息。 我正在使用带有DataAvailable属性的NetworkStream类读取字节。
我的猜测是它可能与一个小/大端问题有关。 我是否需要使用特殊转换将数据从大型更改为小型Endian?我需要使用gzip头读取必要的字节吗?
我之前使用过相同的服务器和未压缩的协议,之前使用带有ReadLine功能的StreamReader没有问题,但该协议纯粹是基于文本的。
编辑:不幸的是我没有选择远程服务器和协议。是GZip格式的耐用部分还是我只需要相应地转换标头?未压缩的数据是纯UTF8编码的字符串,换行符为分隔符。
答案 0 :(得分:2)
GZIP格式并不复杂。 a simple, accessible specification document, IETF RFC 1952中有它的所有荣耀。
GZIP格式指定字节的位顺序。它不能用带有标志的字节序进行调整。 GZIP流的生产者同样负责遵守这方面的规范,以及GZIP流的消费者。
如果我正在调试它,我会查看线路两端的字节,并验证进入的字节是否与出来的字节相同。这足以撇开端序问题。
如果您没有成功传输GZIP字节流,请尝试传输测试数据 - 16字节的0xFF,然后是16字节的0xAA等。然后,验证这是从另一端传出的数据。
对不起,我不知道你是什么意思我读的信息不确定 - 不完整或完整,无论如何都无法读取第二条消息。第二条消息?什么第二条消息?字节顺序不应影响您收到的数据量。
我觉得你没有信心成功传输数据。我建议你在处理endian问题和GZIP格式问题之前验证。