代码之家  ›  专栏  ›  技术社区  ›  weismat

NET客户端与原始数据的Java服务器

  •  0
  • weismat  · 技术社区  · 15 年前

    我在Solaris上编写一个.NET/C客户端到Java服务器上。

    Java服务器以我需要提取的GZIPD格式写入原始字节数据,但我有麻烦读取正确的缓冲区大小的数据。我读到的信息不一定是不完整或完整的,在任何情况下都不能读到第二条信息。 我正在使用具有dataavailable属性的networkstream类读取字节。

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

    我以前使用同一台服务器和一个未压缩的协议,以前使用带有readline函数的streamreader没有问题,但是这个协议纯粹是基于文本的。

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

    1 回复  |  直到 15 年前
        1
  •  2
  •   Cheeso    15 年前

    gzip格式并不复杂。它的辉煌在于 a simple, accessible specification document, IETF RFC 1952 .

    gzip格式指定字节的位顺序。它不能与endianness标志一起调优。gzip流的生产者负责在这方面符合规范,gzip流的消费者也同样如此。

    如果我正在调试这个,我将查看线路两端的字节,并验证输入的字节与输出的字节是否相同。这就足够把endian问题放在一边了。

    如果传输gzip字节流失败,请尝试传输测试数据-16字节的0xff,然后再传输16字节的0xaa等,然后验证这是从另一端传出的数据。

    对不起,我不知道你说的是什么意思 我读到的信息不一定是不完整或完整的,在任何情况下都不能读到第二条信息。 第二条信息?第二条信息是什么?endianness不应影响您接收的数据量。

    我觉得你没有信心成功地传输数据。我建议您在处理endian问题和gzip格式问题之前先验证这一点。