![](/img/trans.png)
[英]How to create and parse Tag, Length, Value (TLV) in JavaScript or java and encode it in Base64
[英]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.