Android 解析 ByteArrayInputStream

来源:互联网 发布:林姗姗sunny淘宝店 编辑:程序博客网 时间:2024/06/08 04:04

Android彩信解码函数,需要从输入流中解析字段。

今天又看了一下pduparse中几个解析函数,在这里做个总结。

 

大概可以分为3类

一、解析字节

1.extractByteValue

这个啥也没的说,就是把一个byte转换成一个整型返回。

二、解析整型

1.parseShortInteger

基本同时,只是返回的有效位不一样,取这个byte的前7位,因此范围0-127

就  return temp & 0x7F; 这句不一样。

 

2.parseUnsignedInt

解析一个无符号整型。

首先判断第一个数字最高位,如果是0,取这个字节的低7位返回。

如果是1,就继续读下一位,直到读到高位为0的byte为止,最后把各个byte的低7位串成一个整型返回。

相当于每一个byte只有7为有效。

 

由于一个int最多32为,所以用这种方式表示的字节流不会超过5(32/7)个octec(8位字节).

 

3、 parseLongInteger

这个解析一个长整型

先读取一个count,表示该整型由多少octet组成,然后读响应字节,组成一个长整型。

由于长整型最多8个字节,所以这个count不会大于8.

再者,由于有了长度,它不需要用高位来标示结束符,因此每一个字节8位都有效。

 

4.parseIntegerValue

解析整型。

先读取第一个字节,如果大于SHORT_INTEGER_MAX(127),即高位为1,则认为是一个short int,直接返回低7位。

否则就解析长int,先读取长度,再解析该长度的自己组成一个整型。

 

5.parseValueLength

读取第一个的8位字节,如果小于SHORT_LENGTH_MAX(30),返回。

如果等于LENGTH_QUOTE(31),按照parseUnsignedInt方法解析。

 

三、解析字符串

1.parseWapString

首先解析第一个字节,如果字符串类型是TYPE_QUOTED_STRING,并且解析出来的第一个字节标识也是QUOTED_STRING_FLAG(34),就跳过这个标示,准备读下面数据。

如果出入类型是TYPE_TEXT_STRING,并且解析出来的第一个字节也是QUOTE(127),同样也是跳过这个标识,准备读下面数据。

否则,就是没有类型标示的字符串,那么就回退数据流。按照一个字符串来解析getWapString。

2.getWapString

这个没什么好说的,就是读取字节到结束,或者 /0结束为止。

3.parseEncodedStringValue

首先读取第一个字节。

如果小于TEXT_MIN,就是说明这个字节是一个标示符,下面有编码方式。跳过这个字节,读取编码方式,然后调用parseWapString再解析下面的字符串数据。

否则,就是说明这个字符串没有编码方式,单纯一个字符串。就从头将其作为一个字符串解析。

 

补充,至于这些关键字符SHORT_LENGTH_MAX、LENGTH_QUOTE之类的,是wsp协议规定的,见wap-230-wsp-20010705-a.pdf,在我上传至资源中。