Java 减少UDP传输数据的最有效方法是什么?

Java 减少UDP传输数据的最有效方法是什么?,java,sockets,encryption,udp,Java,Sockets,Encryption,Udp,我对字节和位的理解不是太多,所以如果这个问题很愚蠢,我很抱歉 我对套接字有一些经验,通常用于传输少量纯文本。然而,这次我必须传输更多的数据,我可以通过UDP来分解这些数据 我正在开发一个游戏,其中服务器是用Java编写的,我想向客户端发送一个对象数组。由于我是一名webdeveloper,JSON是传输数据的第一个弹出窗口,尽管我高度怀疑这是网络中最有效的方式 对于JSON: { "players": [ { "id": "884B0EAA2C7F

我对字节和位的理解不是太多,所以如果这个问题很愚蠢,我很抱歉

我对套接字有一些经验,通常用于传输少量纯文本。然而,这次我必须传输更多的数据,我可以通过UDP来分解这些数据

我正在开发一个游戏,其中服务器是用Java编写的,我想向客户端发送一个对象数组。由于我是一名webdeveloper,JSON是传输数据的第一个弹出窗口,尽管我高度怀疑这是网络中最有效的方式

对于JSON:

{
    "players": [
        {
            "id": "884B0EAA2C7F16BA",   // hex string
            "name": "some guy",         // string
            "x": 0,                     // double
            "y": 0,                     // double
            "xv": 0,                    // double
            "yv": 0,                    // double
            "angle": 0,                 // double
        }, {
            "id": "AB61F7C2AAE0B488",   // hex string
            "name": "some other guy",   // string
            "x": 0,                     // double
            "y": 0,                     // double
            "xv": 0,                    // double
            "yv": 0,                    // double
            "angle": 0,                 // double
        }
    ]
}
现在,我可以添加一个自定义分隔符来分割每个玩家的数据,并添加另一个分隔符来分割数据。在我的光学系统中,最有效的方法之一是在每行中放置播放器的值,并在值之间放置预定义的字符序列

884B0EAA2C7F16BA[|]some guy[|]0[|]0[|]0[|]0[|]0
AB61F7C2AAE0B488[|]some other guy[|]0[|]0[|]0[|]0[|]0
虽然这对我来说是可行的,但是在名字等方面仍然存在一些安全风险。我几乎无法告诉客户端,包含“[|]”的显示名是非法的

减少传输数据的最有效方法是什么?


任何有关加密的附加信息都将不胜感激

考虑使用Google协议缓冲区。您定义了一条消息(在.proto文件中),它用不同的编程语言为您生成代码

生成的代码可以对消息进行编码/解码,而无需考虑数据的编码方式

编码的消息将非常小,编码/解码速度非常快。协议缓冲区在这方面非常好


网站上有一些很好的文档:

如果你的目标是最小化传输数据,你可以尝试一种不太复杂的压缩算法(我们不想花很多时间压缩和解压缩每个数据包)。 您可以查看或搜索外部库,例如

除非可以确定每个数据字段的长度,否则必须使用某种分隔符。避免在玩家姓名中使用某些字符几乎在每个游戏中都会用到,为什么你不能这样做呢


如果您仍然希望允许在播放器名称中使用任何字符,请通过TCP套接字将所有字符一起发送,并在每个客户端中使用pairs ID player name构建一个表,并在UDP语句中使用服务器提供的唯一ID。通过这种方式,您可以安全地使用分隔符。

“加密”不是最小化数据,而是压缩最小化数据-您可以查看类似于gzip压缩类(GZIPInput/Output streams)的内容?我将对此进行研究。听起来很有趣!谷歌让我惊奇的是他们所有的神奇工具,API'SI也应该考虑Apache节俭提供相同的东西。看到这个了吗