java - 如何处理在 socket java 上发送的大对象?

标签 java json sockets gson

我正在尝试用 java 实现客户端服务器
我在套接字之间建立了连接
并在流中将 JSON 对象作为字符串发送
如果我有大物体,有没有办法处理它
所以我不必重新组合它,因为 tcp 数据包的大小限制(不知道何时将单个对象作为客户端完全传输给我)
注意:我使用 G-son 将对象转换为 JSON 对象

最佳答案

If I have big object is there's a way to handle it so I don't have to regroup it because the limit size of tcp packet. (I cant know when the single object is fully transferred to me as client or not yet)

实际上,客户端可以知道它何时收到了完整的 JSON 对象。当您的客户看到与开头的 { 匹配的 } 时,您就拥有了完整的对象。当然,这意味着您的客户端需要理解 JSON 语法,但您可以使用现成的 JSON 解析器来做到这一点。

因此最好的方法是让服务器生成并发送 JSON,然后客户端使用普通的 JSON 解析器解析套接字输入流。如果您这样做,那么您就不需要知道 TCP/IP 堆栈是否已将数据流分解为多个数据包。当 JSON 解析器看到它们时,它们将被重新组合成字节流。


如果这不能回答您的问题,我们需要查看您的代码当前正在做什么以在服务器端生成和发送 JSON。

关于java - 如何处理在 socket java 上发送的大对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24976181/

相关文章:

java - 对集合调用 addFirst

c - Linux socket-他们断开了连接还是我们断开了连接?

Java NIO SelectionKey 迭代器和键处理,我做得对吗?

javascript - JSON 解析器错误

javascript - 使用工厂获取数据 json

c++ - 如何为 send() 和 select() 缓冲数据?

java - WebView.loadData 不适用于 Android 9.0 (API-29)

java - org.springframework.beans.factory.NoSuchBeanDefinitionException : No bean named 'BookDao' is defined

java - Docker 服务健康检查不适用于 Spring Boot 应用程序

java - 如何获取JSON中的值标志