异步Boost写入Java套接字-传入字节数组有时部分为0? 我有一些C++代码正在写入一个java程序中读取的套接字。 C++程序使用Boosi::AsicCyWrand来传输字节,然后由java程序读取它们。async_write调用的前4个字节对应于基础数据段的大小。因为大小是由这个头显式确定的,所以Java代码可以使用BufferedInputStream的“read”方法填充实际数据大小的字节数组

异步Boost写入Java套接字-传入字节数组有时部分为0? 我有一些C++代码正在写入一个java程序中读取的套接字。 C++程序使用Boosi::AsicCyWrand来传输字节,然后由java程序读取它们。async_write调用的前4个字节对应于基础数据段的大小。因为大小是由这个头显式确定的,所以Java代码可以使用BufferedInputStream的“read”方法填充实际数据大小的字节数组,java,c++,boost,tcp,boost-asio,Java,C++,Boost,Tcp,Boost Asio,尽管这似乎几乎每次都能正常工作,但有时InputStream读取的字节数组包含缓冲区末尾的清零数据。每50000封邮件中约有1封是以这种方式“损坏”的。缓冲区中清零数据开始的位置不同。虽然我可以捕捉到这一点并抛出消息,但我想知道这是否是预期的性能?我曾经尝试过,两个程序都通过本地主机上的套接字进行通信,但仍然存在问题 我不相信C++程序中写入的字节超出范围,因为临时存储在队列中直到“HealLeWrad”返回(来自AsYcCyWrand) C++程序只有一个线程执行IOIOService .<

尽管这似乎几乎每次都能正常工作,但有时InputStream读取的字节数组包含缓冲区末尾的清零数据。每50000封邮件中约有1封是以这种方式“损坏”的。缓冲区中清零数据开始的位置不同。虽然我可以捕捉到这一点并抛出消息,但我想知道这是否是预期的性能?我曾经尝试过,两个程序都通过本地主机上的套接字进行通信,但仍然存在问题

我不相信C++程序中写入的字节超出范围,因为临时存储在队列中直到“HealLeWrad”返回(来自AsYcCyWrand)

C++程序只有一个线程执行IOIOService .< /P> Java程序也在单个线程中执行读取


我没有在两个程序中检测到任何内存泄漏。

我使用IO和NIO编写了许多套接字程序,这些问题总是由错误引起的。我建议您尝试连接java到java,以测试bug是在java还是C++方面。

我用IO和NiO编写了许多套接字程序,这些问题总是由bug引起的。我建议你尝试连接java到java,测试这个bug是在java还是C++方面。

很可能,这个bug在阅读方面。你确定你真的阅读了整封邮件吗?

很可能,这个错误在阅读端。确实读取了整个消息吗?

您是对的,事实证明BufferedInputStream的“读取”方法没有填充它应该填充的字节[]中的所有字节。我不知道为什么会发生这种情况,但我很感激你的建议。你是对的,事实证明BufferedInputStream的“read”方法并没有填充它应该填充的byte[]中的所有字节。我不知道为什么会发生这种情况,但我很感激你的忠告。