有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java编码简约消息的最佳方式

我需要创建一个小的客户机/服务器应用程序,该应用程序应该像这样传输数据:

statistic<;-命令类型标识符

15.23.63.12<;-此IP地址的统计信息

increase<;-应该使用地址的统计信息执行的操作类型

6<;-只是一些其他参数

因此,必须有一个字符串来标识命令的类型,然后根据命令类型应该有一些参数。这些参数是不同的,但始终是基本数据类型。很可能是字符串、短字符、字节、整数等等

因此,存在不同基本数据类型的指令集

我的问题是:将socket的流包装在DataInput/OutputStreams中并从中读取/写入是最好的方法吗?还是最好将消息保存到字节数组中,然后将该字节数组包装到ByteArrayInputStream中,并将ByteArrayInputStream包装到我可以读取的DataInputStream中?或者我应该将字节数组包装在ByteBuffer中吗

如果我想加密我的消息,我是否必须将它们保存为字节数组,然后解密字节数组,然后将其包装到某种数据读取器中


共 (1) 个答案

  1. # 1 楼答案

    如果这是你的要求,你可以做得更“有效”

    我将用字节对命令类型修饰符建模,前提是您的不同模式不超过255个:

    byte cmd_statistic = 0;
    byte cmd_nonstatistic = 1;
    

    然后每个ip地址可以建模为4个字节,如下所示:

    byte[] ip0 = new byte[]{15, 23, 63, 12};
    byte[] ip1 = new byte[]{15, 23, 63, 13};
    

    操作也可以是字节:

    byte action_increase = 0;
    byte action_decrease = 1;
    

    如果可以将最后的参数建模为字节,那么只需使用InputStreams(is)和OutputStreams即可:

    // Code for reading, writing is very similar
    byte cmd = (byte)is.read();
    
    byte[] ip = new byte[4];
    is.read(ip, 0, 4);
    
    byte action = (byte)is.read();
    byte extra  = (byte)is.read();
    

    这也很容易保存在大字节[]中,更容易用于加密