我有一个字节数组(UTF-8编码的字符串从客户端发送为字节数组)。 消息应具有以下格式:
'数字''时间戳''str1''str2'
E.g
1 2000-01-31T20:00.00第一个str第二个str
很明显,很容易从字节数组中读取'number'和'timestamp'。 'str1'的起始位置也可以计算出来。 考虑到'str1'和'str2'可以包含任何内容(任何长度),可以使用什么类型的分隔符来知道'str1'何时结束和'str2'何时开始?还是有任何其他技巧可以解析这样的事情。
note1:消息格式由我提供,因此只要所有4条信息都在字节数组中,任何具有不同格式/顺序的解决方案都可以。
note2:我知道我可以对str1进行编码,使其不包含我的自定义分隔符,但我希望避免编码/解码数据的开销。
note3:我能想到的一个解决方案是在从客户端发送数据时在其前面写入str1的长度。 例如'number''时间戳''str1length''str1''str2'
你能想到其他任何技巧吗?
感谢
答案 0 :(得分:1)
我建议你做你列出的第3个选项:
number timestamp length_of_string1 string1 length_of_string_two string2
在string1和string2之间粘贴分隔符可能是一个坏主意,如“|”或者“^]”,因为那时你的字符串中不再有分隔符......
另请注意,如果您要发送字符串,如果它有空格,则会将其拆分。解决这个问题的方法是通过执行引语识别字符串拆分并转义字符串,用“s
包围它答案 1 :(得分:0)
如果我有自由选择语法,我会做以下其中一项:
如果某个Unicode字符永远不会出现在str1
和str2
中(为了参数而称之为'|'
),我会连接4以'|'
为分隔符的组件。然后我将使用String.split("\\\\|");
如果我无法确定我选择的任何字符不会在str1
或str2
中使用,我会选择一个分隔符和一个转义字符(比如说) '|'
和'\\'
)并使用转义字符来转义文字分隔符和文字转义字符。构建消息然后解析它是更费力的代码,但它肯定会起作用。
作为第三种选择,如果两端都是Java,我会考虑使用Java数据流对数据进行编码和解码。