一般来说,数据包如果是string型,用StringTokenizer可以很好地去处理不同的数据,但是如果数据包
是byte[]等的数据流,用StreamTokenizer就可以很方便的去处理自定义的一些流格式了。
StreamTokenizer定义了几种基本的常量用于标识解析过程:TT_EOF(流结尾)、TT_EOL(行结尾)、
TT_NUMBER(数字符号, 0 1 2 3 4 5 6 7 8 9 . -都属于数字语法)、TT_WORD(一个单词)。
例: 我要处理一个byte[]的数据,用空格为分隔符, byte是 [0-9\-] 的可能用范围
public void run() {
this.running = true; // 定义一个流提取器
StreamTokenizer token = new StreamTokenizer( new InputStreamReader( this.in ) );
token.resetSyntax(); //重定所有的字符都是分隔符
token.whitespaceChars(' ', ' '); //设置分隔符是空格,参数也可以是两个ascii范围的值
token.wordChars('0', '9'); // 设置基本的数据字符,参数可以用ascii的范围
token.wordChars('-', '-'); // 添加基本字符
token.parseNumbers(); // 假设我要处理的数据有数字,自运转成double型
try {
while ( this.running ) {
// 返回下一个数据的类型
int type = token.nextToken();
switch (type) {
case token.TT_WORD: { // 是字符串}
case token.TT_NUMBER: { // 是数字}
case token.TT_EOF: { // 流结束}
case token.TT_EOL: { // 换行}
}
int v = (int) token.nval;
}
}
catch(Exception ex) {
ex.printStackTrace();
}
}




















