Java 如何实现多用途套接字协议?

Java 如何实现多用途套接字协议?,java,io,Java,Io,我正在构建一个供个人使用的客户机/服务器媒体应用程序。应用程序可以工作,但每个连接有两个套接字:一个用于服务器/客户机命令和通信(只是来回发送JSON字符串;另一个用于发送序列化媒体) 如何以一种我知道数据是什么的方式合并这两个套接字,还是让它们保持原样更好?您需要为消息定义一个结构,以便对这两个套接字使用单个套接字。例如: Message format: Command,DataLen,Data Example messages: JSON,20,{ "text": "Hello!"

我正在构建一个供个人使用的客户机/服务器媒体应用程序。应用程序可以工作,但每个连接有两个套接字:一个用于服务器/客户机命令和通信(只是来回发送JSON字符串;另一个用于发送序列化媒体)


如何以一种我知道数据是什么的方式合并这两个套接字,还是让它们保持原样更好?

您需要为消息定义一个结构,以便对这两个套接字使用单个套接字。例如:

Message format:
  Command,DataLen,Data

Example messages:
  JSON,20,{ "text": "Hello!" }

  CMD1:9:Some Data
CommandLen(4-bytes):Command:DataLen(4-bytes):Data
这是一种“基于文本”的格式,使用逗号将命令与数据长度和数据分开。您可以使用二进制格式(可能更容易解析,也更健壮),例如:

Message format:
  Command,DataLen,Data

Example messages:
  JSON,20,{ "text": "Hello!" }

  CMD1:9:Some Data
CommandLen(4-bytes):Command:DataLen(4-bytes):Data

@EvanTeran,brettw这是如何支持原始二进制数据流的?据我所知,没有办法将原始二进制数据放入JSON字符串中。显然,我可以发送一条JSON消息,说“嘿,客户端期望xxx二进制数据”,但这并不能解决消息/二进制数据同步问题。如果我要发送JSON编码的二进制数据,我可能会必须使用base64编码。它很简单,并且数据大小的膨胀相对较小。@EvanTeran谢谢你的建议。我做了一个简单的数组。toString(byte[]),然后再次返回基准测试,并将其与base64进行比较。你赢了。再次感谢你,我不知道Bas64的史诗性。这些数字(对关心的人来说)
要解码的2ms平均值是base64。
57ms平均值要用蛮力解码。