gpt4 book ai didi

java - Async Boost 写入 Java Socket - 传入字节数组有时部分为 0?

转载 作者:可可西里 更新时间:2023-11-01 02:52:50 25 4
gpt4 key购买 nike

我有一些 C++ 代码正在写入 Java 程序正在读取的套接字。

C++ 程序使用 boost::async_write 传输字节,然后由 Java 程序读取。 async_write 调用的前 4 个字节对应于底层数据段的大小。由于大小由该 header 明确确定,因此 Java 代码可以使用 BufferedInputStream 的“读取”方法填充实际数据大小的字节数组。

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

我不相信在 C++ 程序中写入的字节会超出范围,因为它们会临时存储在队列中,直到“handle_write”返回(从 async_write)

C++ 程序只有一个线程执行 io_service。

Java 程序也在单线程中执行读取。

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

最佳答案

这个错误很可能是在阅读方面。您确定您真的阅读了整封邮件吗?

关于java - Async Boost 写入 Java Socket - 传入字节数组有时部分为 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8934209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com