package com.qq.taf.jce;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.nio.BufferUnderflowException;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
* 数据读取流
* @author meteorchen
*
*/
public final class JceInputStream {
private ByteBuffer bs; // 缓冲区
/**
* 头数据
* @author meteorchen
*
*/
public static class HeadData {
public byte type;
public int tag;
public void clear() {
type = 0 ;
tag = 0 ;
}
}
public JceInputStream() {
}
public JceInputStream(ByteBuffer bs) {
this.bs = bs;
}
public JceInputStream(byte[] bs) {
this.bs = ByteBuffer.wrap(bs);
}
public JceInputStream(byte[] bs, int pos) {
this.bs = ByteBuffer.wrap(bs);
this.bs.position(pos);
}
/**
* 拼写错误
* @deprecated use wrap instead
*/
public void warp(byte[] bs) {
wrap(bs);
}
public void wrap(byte[] bs) {
this.bs = ByteBuffer.wrap(bs);
}
/**
* 读取数据头
* @param hd 读取到的头信息
* @param bb 缓冲
* @return 读取的字节数
*/
public static int readHead(HeadData hd, ByteBuffer bb) {
byte b = bb.get();
hd.type = (byte) (b & 15);
hd.tag = ((b & (15 << 4)) >> 4);
if (hd.tag == 15) {
hd.tag = (bb.get()&0x00ff);
return 2;
}
return 1;
}
public void readHead(HeadData hd) {
readHead(hd, bs);
}
// 读取头信息,但不移动缓冲区的当前偏移
private int peakHead(HeadData hd) {
return readHead(hd, bs.duplicate());
}
// 跳过若干字节
private void skip(int len) {
bs.position(bs.position() + len);
}
// 跳到指定的tag的数据之前
public boolean skipToTag(int tag) {
try {
HeadData hd = new HeadData();
while (true) {
int len = peakHead(hd);
if (hd.type == JceStruct.STRUCT_END) {
return false;
}
if (tag <= hd.tag)
return tag == hd.tag;
skip(len);
skipField(hd.type);
}
} catch (JceDecodeException e) {
} catch (BufferUnderflowException e) {
}
return false;
}
// 跳到当前结构的结束位置
public void skipToStructEnd() {
HeadData hd = new HeadData();
do {
readHead(hd);
skipField(hd.type);
} while (hd.type != JceStruct.STRUCT_END);
}
// 跳过一个字段
private void skipField() {
HeadData hd = new HeadData();
readHead(hd);
skipField(hd.type);
}
private void skipField(byte type) {
switch (type) {
case JceStruct.BYTE:
skip(1);
break;
case JceStruct.SHORT:
skip(2);
break;
case JceStruct.INT:
skip(4);
break;
case JceStruct.LONG:
skip(8);
break;
case JceStruct.FLOAT:
skip(4);
break;
case JceStruct.DOUBLE:
skip(8);
break;
case JceStruct.STRING1: {
int len = bs.get();
if (len < 0)
len += 256;
skip(len);
break;
}
case JceStruct.STRING4: {
skip(bs.getInt());
break;
}
case JceStruct.MAP: {
int size = read(0, 0, true);
for (int i = 0; i < size * 2; ++i)
skipField();
break;
}
case JceStruct.LIST: {
int size = read(0, 0, true);
for (int i = 0; i < size; ++i)
skipField();
break;
}
case JceStruct.SIMPLE_LIST: {
HeadData hd = new HeadData();
readHead(hd);
if(hd.type != JceStruct.BYTE){
throw new JceDecodeException("skipField with invalid type, type value: " + type + ", " + hd.type);
}
int size = read(0, 0, true);
skip(size);
break;
}
case JceStruct.STRUCT_BEGIN:
skipToStructEnd();
break;
case JceStruct.STRUCT_END:
case JceStruct.ZERO_TAG:
break;
default:
throw new JceDecodeException("invalid type.");
}
}
public boolean read(boolean b, int tag, boolean isRequire) {
byte c = read((byte) 0x0, tag, isRequire);
return c != 0;
}
public byte read(byte c, int tag, boolean isRequire) {
if (skipToTag(tag)) {
HeadData hd = new HeadData();
readHead(hd);
switch (hd.type) {
case JceStruct.ZERO_TAG:
c = 0x0;
break;
case JceStruct.BYTE:
c = bs.get();
break;
default:
throw new JceDecodeException("type mismatch.");
}
} else if (isRequire) {
throw new JceDecodeException("require field not exist.");
}
return c;
}
public short read(short n, int tag, boolean isRequire) {
if (skipToTag(tag)) {
HeadData hd = new HeadData();
readHead(hd);
switch (hd.type) {
case JceStruct.ZERO_TAG:
n = 0;
break;
case JceStruct.BYTE:
n = (short) bs.get();
break;
case JceStruct.SHORT:
n = bs.getShort();
break;
default:
throw new JceDecodeException("type mismatch.");
}
} else if (isRequire) {
throw new JceDecodeException("require field not exist.");
}
return n;
}
public int read(int n, int tag, boolean isRequire) {
if (skipToTag(tag)) {
HeadData hd = new HeadData();
readHead(hd);
switch (hd.type) {
case JceStruct.ZERO_TAG:
n = 0;
break;
case JceStruct.BYTE:
n = bs.get();
break;
case JceStruct.SHORT:
n = bs.getShort();
break;
case JceStruct.INT:
n = bs.getInt();
break;
default:
throw new JceDecodeException("type mismatch.");
}
} else if (isRequire) {
throw new JceDecodeException("require field not exist.");
}
return n;
}
public long read(long n, int tag, boolean isRequire) {
if (skipToTag(tag)) {
HeadData hd = new HeadData();
readHead(hd);
switch (hd.type) {
case JceStruct.ZERO_TAG:
n = 0;
break;
case JceStruct.BYTE:
n = bs.get();
break;
case JceStruct.SHORT:
n = bs.getShort();
break;
case JceStruct.INT:
n = bs.getInt();
break;
case JceStruct.LONG:
n = bs.getLong();
break;
default:
throw new JceDecodeException("type mismatch.");
}
} else if (isRequire) {
throw new JceDecodeException("require field not exist.");
}
return n;
}
public float read(float n, int tag, boolean isRequire) {
if (skipToTag(tag)) {
HeadData hd = new HeadData();
readHead(hd);
switch (hd.type) {
case JceStruct.ZERO_TAG:
n = 0;
break;
case JceStruct.FLOAT:
n = bs.getFloat();
break;
default:
throw new JceDecodeException("type mismatch.");
}
} else if (isRequire) {
throw new JceDecodeException("require field not exist.");
}
return n;
}
public double read(double n, int tag, boolean isRequire) {
if (skipToTag(tag)) {
HeadData hd = new HeadData();
readHead(hd);
switch (hd.type) {
case JceStruct.ZERO_TAG:
n = 0;
break;
case JceStruct.FLOAT:
n = bs.getFloat();
break;
case JceStruct.DOUBLE:
n = bs.getDouble();
break;
default:
throw new JceDecodeException("type mismatch.");
}
} else if (isRequire) {
throw new JceDecodeException("require field not exist.");
}
return n;
}
public String readByteString(String s, int tag, boolean isRequire) {
if (skipToTag(tag)) {
HeadData hd = new HeadData();
readHead(hd);
switch (hd.type) {
case JceStruct.STRING1: {
int len = bs.get();
if (len < 0)
len += 256;
byte[] ss = new byte[len];
bs.get(ss);
s = HexUtil.bytes2HexStr(ss);
}
break;
case JceStruct.STRING4: {
int len = bs.getInt();
if (len > JceStruct.JCE_MAX_STRING_LENGTH || len < 0)
throw new JceDecodeException("String too long: " + len);
byte[] ss = new byte[len];
bs.get(ss);
s = HexUtil.bytes2HexStr(ss);
}
break;
default:
throw new JceDecodeException("type mismatch.");
}
} else if (isRequire) {
throw new JceDecodeException("
没有合适的资源?快使用搜索试试~ 我知道了~
安卓应用-手机工具-xvrpro app v3.5.2.zip
共1712个文件
png:1022个
xml:509个
properties:37个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 173 浏览量
2021-12-11
01:49:01
上传
评论
收藏 36.3MB ZIP 举报
温馨提示
安卓应用-手机工具-xvrpro app v3.5.2.zip
资源推荐
资源详情
资源评论
收起资源包目录
安卓应用-手机工具-xvrpro app v3.5.2.zip (1712个子文件)
DimensionValueSet.aidl 29B
MeasureValueSet.aidl 27B
DimensionSet.aidl 24B
Transaction.aidl 23B
MeasureSet.aidl 22B
Dimension.aidl 21B
Measure.aidl 19B
.appkey 16B
resources.arsc 1.59MB
hmsrootcas.bks 26KB
subpage.css 3KB
base.css 2KB
mimetypes.default 581B
mailcap.default 292B
classes.dex 8.51MB
com.alibaba.sdk.android.ams.common.spi.FactoryProvider 89B
publicsuffixes.gz 33KB
liveview.html 14KB
liveview.html 13KB
playback.html 7KB
playback.html 5KB
pic_and_video.html 5KB
devices.html 5KB
help_en.html 5KB
help_cn.html 4KB
pic_and_video.html 4KB
cloud.html 4KB
devices.html 4KB
configuration.html 4KB
cloud.html 4KB
configuration.html 3KB
alarm.html 3KB
alarm.html 2KB
overview.html 1KB
overview.html 1KB
new_features.html 898B
new_features.html 848B
JceInputStream.java 26KB
JceDisplayer.java 16KB
JceUtil.java 11KB
BasicClassTypeUtil.java 10KB
UniAttribute.java 10KB
OldUniAttribute.java 9KB
UniPacket.java 8KB
JceOutputStream.java 8KB
RequestPacket.java 4KB
WupHexUtil.java 4KB
DynamicInputStream.java 3KB
WupInfo.java 3KB
TafUniPacket.java 3KB
HexUtil.java 3KB
JceStruct.java 2KB
DynamicOutputStream.java 2KB
JceField.java 2KB
StructField.java 1KB
MapField.java 712B
NumberField.java 587B
ListField.java 492B
ZeroField.java 469B
DoubleField.java 352B
ShortField.java 352B
FloatField.java 346B
LongField.java 342B
IntField.java 334B
ByteField.java 332B
ByteArrayField.java 293B
StringField.java 285B
ObjectCreateException.java 191B
JceDecodeException.java 164B
JceEncodeException.java 160B
loading_albatron.jpg 275KB
loading_eyetr.jpg 182KB
loading_optina.jpg 153KB
mailcap 718B
javamail.charset.map 1KB
javamail.default.address.map 12B
MANIFEST.MF 193KB
miui_push_version 108B
alarm.mp3 29KB
alarm_test.ogg 43KB
beep.ogg 6KB
loading_secureye_land.png 1.99MB
wallcam_ahd_loading.png 702KB
img_loading.png 635KB
loading_atcloud.png 633KB
jassun_loading.png 595KB
loading_secureye.png 553KB
loading_skyxvr_land.png 511KB
loading_okview.png 394KB
wallcam_ahd_loading.png 369KB
lookeye_loading.png 359KB
loading_achd.png 345KB
loading_new_topsview.png 295KB
achd_icon.png 279KB
loading_xvr_pro.png 218KB
loading_robocam.png 216KB
wallcam_ahd_loading.png 206KB
loading_spc_cloud.png 182KB
loading_spc_smart.png 182KB
login_home_bg3.png 177KB
共 1712 条
- 1
- 2
- 3
- 4
- 5
- 6
- 18
资源评论
programxh
- 粉丝: 17
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- VID20240521070643.mp4
- Android系统原理与开发学习要点详解-培训课件.zip
- 部署yolov8的tensorrt模型支持检测分割姿态估计的C++源码+部署步骤.zip
- 以简单、易用、高性能为目标、开源的时序数据库,支持Linux及Windows, Time Series Database.zip
- python-leetcode面试题解之第198题打家劫舍-题解.zip
- python-leetcode面试题解之第191题位1的个数-题解.zip
- python-leetcode面试题解之第186题反转字符串中的单词II-题解.zip
- 一个基于python的web后端高性能开发框架,下载可用
- python-leetcode面试题解之第179题最大数-题解.zip
- python-leetcode面试题解之第170题两数之和III数据结构设计-题解.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功