Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何处理在socket java上发送的大对象?_Java_Json_Sockets_Gson - Fatal编程技术网

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

如何处理在socket java上发送的大对象?,java,json,sockets,gson,Java,Json,Sockets,Gson,我正在尝试用java实现客户机服务器 我在插座中建立了连接 并将JSON对象作为字符串发送到流上 如果我有一个大对象,是否有办法处理它 因此,我不必重新组合它,因为tcp数据包的大小有限(无法知道单个对象何时作为客户端完全传输给我) 注意:我使用G-son将对象转换为JSON对象 如果我有一个大对象,那么有一种方法可以处理它,这样我就不必重新组合它,因为tcp数据包的大小是有限的。(我不知道单个对象何时作为客户完全转移给我) 实际上,客户机可以知道何时收到完整的JSON对象。当您的客户机看到与开

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

如果我有一个大对象,那么有一种方法可以处理它,这样我就不必重新组合它,因为tcp数据包的大小是有限的。(我不知道单个对象何时作为客户完全转移给我)

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

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


如果这还不能回答您的问题,那么我们需要查看您的代码当前在服务器端生成和发送JSON的过程

是否有一种方法可以处理它,这样我就不必重新组合它,因为tcp数据包的大小是有限的

您不必关心TCP数据包的大小。只需编写数据。TCP将为您对数据进行分段和打包

(不知道单个对象何时作为客户完全转移给我)

是的,你可以。正如@StephenC提到的,你可以到达结尾“}”。在任何情况下,JSON解析器都应该为您解决这个问题


你的问题建立在错误的假设上。

你必须把对象分块写。您是否碰巧拥有到目前为止所拥有的,以便我们能够看到您是如何序列化JSON实体的?@Makoto是的,我已经发送了一个从java对象检索到的JSON对象,它工作了,但它是一个小对象,我需要一个机制来处理较大的对象,可能是那些持有照片(作为字符串)的对象所以我保证我把它都当作一个对象,而不是块你不必把你的对象写成块。API将为您进行打包。只要写下数据@Makoto在这一点上错了。@EJP如果这是真的,无论对象大小如何,那么我的问题就解决了。。谢谢你的回答。。希望你能向我保证这是真的,因为我读到了它已经成块了,但我不确定我已经说过这是真的。您希望我重复多少次?谢谢您的回答,我正在使用gson在服务器中创建json对象,而在客户机中创建json对象。。所以我不是自己阅读json对象,gson会自动为我处理吗?我不是使用json解析器,gson会为我处理解析,这会为我完成任务吗?(无论大小)您正在解析JSON对象。因此,您使用的是JSON解析器。任何编写良好的解析器的行为都应该如本文所述。