📄 syncsettingota.java
字号:
/**
*
*/
package com.ultrapower.test;
import java.io.File;
import java.io.IOException;
import java.io.StringReader;
import java.util.Vector;
import org.kxml.Xml;
import org.kxml.parser.ParseEvent;
import org.kxml.parser.XmlParser;
import com.ultrapower.syncSettingsXML.SyncSettingWriter;
import com.ultrapower.syncSettingsXML.TokenFactory;
import com.ultrapower.syncSettingsXML.WBXMLToken;
import com.ultrapower.tools.IOTools;
/**
* @author VictorZheng
*
*/
public class SyncSettingOTA {
private static Vector<SyncSettingWriter> vWriter = new Vector<SyncSettingWriter>();
private static int MAX_OTA_SMS_LENGTH = 115;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
File xmlDir = new File("C:\\opt\\xml\\syncsettings.xml");
String xml = IOTools.readFileString(xmlDir);
SyncSettingWriter writer = new SyncSettingWriter();
vWriter.addElement(writer);
XmlParser xmlp = new XmlParser(new StringReader(xml));
// 遍历XML解析
traverseXML(xmlp);
/*
* 对于Vector中的每一个Writer都做关闭动作
*/
int nIndex = 0;
for(SyncSettingWriter writerSync : vWriter)
{
nIndex++;
writerSync.close(vWriter.size(), nIndex);
System.out.println(encodeHex(writerSync.getBytes()));
}
} catch (IOException e) {
} finally {
}
}
// --------------------------------------------------------- Private methods
private static void traverseXML(XmlParser parser) throws IOException {
boolean leave = false;
TokenFactory token = TokenFactory.getInstance();
do
{
ParseEvent event = parser.read();
switch (event.getType()) {
case Xml.START_TAG:
String name = event.getName();
System.out.println(name);
if(vWriter.lastElement().size() > MAX_OTA_SMS_LENGTH)
{
System.out.println("#Last Writer length="
+ vWriter.lastElement().size()
+ ",Now Another Writer!");
// 重新建立另一个Writer,并插入Vector
SyncSettingWriter writerNew = new SyncSettingWriter();
vWriter.add(writerNew);
}
java.lang.Integer nToken = (java.lang.Integer)token.myPublicTokenMap.get(name);
if(nToken != null)
{
vWriter.lastElement().writeBuffer(nToken);
}
traverseXML(parser); // recursion
break;
case Xml.END_TAG:
// 写入XML元素的结束符
vWriter.lastElement().writeBuffer(WBXMLToken.END);
leave = true;
break;
case Xml.END_DOCUMENT:
// 整个XML文档解析完毕
leave = true;
break;
case Xml.TEXT:
// 插入“Inline string follows”字节
vWriter.lastElement().writeBuffer(WBXMLToken.STR_I);
// 写入节点值
vWriter.lastElement().writeBuffer(event.getText());
// 写入字符串的结束符
vWriter.lastElement().writeBuffer(WBXMLToken.END_INLINESTRING);
break;
case Xml.WHITESPACE:
break;
default:
}
} while (!leave);
}
public static final String encodeHex (byte[] bytes)
{
StringBuffer buff = new StringBuffer(bytes.length * 2);
String b;
for (int i=0; i<bytes.length ; i++)
{
b = Integer.toHexString(bytes[i]);
// byte是两个字节的,而上面的Integer.toHexString会把字节扩展为4个字节
// 如果byte是一个字节的,则前面加一个0前缀
buff.append(b.length() > 2 ? b.substring(6,8) : ((b.length() > 1) ? b:"0" + b));
//buff.append(" ");
}
return buff.toString();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -