解析包含未知长度字段的字节数组

Man*_*lva 6 java string parsing

我在Java中解析一个具有以下规范的字节数组:

Trace data format:
    - 4 bytes containing the Id.
    - 4 bytes containing the address.
    - N bytes containing the first name, where 0 < N < 32
    - N bytes containing the last name, where 0 < N < 32
    - 4 bytes containing the Minimum
    - 4 bytes containing the Maximum 
    - 4 bytes containing the Resource Default Level
Run Code Online (Sandbox Code Playgroud)

今天我没有看到解析这个数组的任何解决方案,以获得具有正确类型的7变量.你确认或者我错过了Java中的魔术函数,允许在字节数组中找到字符串"限制"(我无法看到最小值如何与其关联的ASCII字符区分开来).

关于2个字符串之间的特殊字符是否有任何"约定"?

Mic*_*rdt 12

好吧,你知道第一个名字从字节9开始,而姓氏以字节结尾(lenght-13).不确定的是如何找到名字的结尾和姓氏的开头.我看到一些可能的消息:

  • 如果格式是由C程序员定义的,则两个名称字段很可能以空字节终止,因为这是字符串的C约定.
  • 如果它是由Java程序员定义的,则可以通过编写writeUTF(),这意味着字节计数的规范很可能是错误的.但是,这至少指定了编码,否则这是一个悬而未决的问题.
  • 如果它是由COBOL程序员定义的,则这两个字段可以是固定长度的,并用零或空格填充,格式规范列出有效载荷长度而不是字段长度.
  • 如果它是由一个真正无能的程序员(无论什么语言)定义的,它包含两个没有分隔符或计数的名称,所以不可能实际分开它们(如果你没有这些信息,那么Java中没有"魔术"功能或者其他可以用空气来召唤它的地方.我想你可能希望姓氏总是以大写字母开头,没有人使用双重名字或全部大写字母.


dac*_*cwe 5

关于2个字符串之间的特殊字符是否有任何"约定"?

好的c字符串通常以空值终止\0.

如果没有这样的字符,我会说不可能解析结构.