繁体   English   中英

您将如何解析 Java 中的此 TLV?

[英]How would you parse this TLV in Java?

我有一个为 iPhone (Objective-C) 编写的移动应用程序,它允许用户使用特定格式导入数据。 我在 Java 中为 Android 编写了相同的应用程序,并且我已经让用户开始要求能够导入。 数据的格式是一种可移植的标准,编写此类应用程序的人必须能够导入和导出。

虽然我确实在 Objective-C 中写了我要问的内容,但我觉得我可以通过不同的方式让我的生活变得更轻松。 所以,我想问一下您如何解析Java中的以下TLV。 我不需要代码,只需要要点。

这是 TLV 格式:

<Type:Length>Value<Type:Length>Value<Type:Length>Value<end>

每条记录以<开头并以<end> 记录中的 \n 是可以接受的,零长度值也可以。

这是一个描述四辆不同汽车的示例输入,请注意多行记录和零长度值。

<make:4>ford<model:7>contour<color:3>red<end>
<make:5>mazda<model:3>mpv<color:5>black<end>
<make:3>bmw
<model:3>335
<color:6>yellow
<end>
<make:7>unknown<model:0><color:4>grey<end>

解析数据后,我会将其插入 SQLite 数据库,因此最终按每条记录循环数据将产生一堆字符串,我可以将其用作 INSERT 语句的一部分。

感谢您提供的任何想法!

缺口

很奇怪的格式。 有公布的规范吗?

您可以尝试执行字符串标记化路线。 您可以利用内置的 Java 正则表达式来帮助匹配,或者甚至只使用基本的String class 方法(拆分和修剪是您的朋友)。 基本上只做:

String[] lines = input.split("<end>");
for(String line : lines)
{
    line = line.trim();
    String[] sublines = line.split("<");
    for(String subline : sublines)
    {
        subline = subline.trim();
        ...additional breaking, trimming, branching...
    }
}

类型长度是一个有趣的验证组件,但对于现代语言来说有点奇怪。 我要问的一个大问题是期望什么编码。 UTF-8? 7位ASCII? 奇怪的东西?

我的朋友会称上面的伪代码为 hack,并告诉我做一些类似JavaCC的事情,但我有一些书呆子和不切实际的朋友。 ;)

如果输入文件不会太大,您可以将其全部读入字符串,然后将字符串拆分为基于<end>作为分隔符的数组。 然后使用正则表达式遍历数组以捕获每个Type和相应的Value

格式的 xmlishness 有点令人困惑。 长度是令牌的长度对吗? 我想我会使用以下算法:

next_record:
while (! eof) {
  read token between '<' and '>'
  if (token == "end") {
     continue next_record
  }
  split token into type and length
  read length number of characters into value
  add tuplee (type, length, value) to collection
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM