⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wsptokenizer.java

📁 用Java写的彩信的程序。包括wsp/mime/mms几部分。
💻 JAVA
字号:
/* 
 * JVending - J2ME MMS Client
 *
 * Distributed under Apache style software license included with the source code.
 */

package org.jvending.messaging.wsp.tokens;

import java.io.DataInputStream;
import java.io.InputStream;
import java.io.IOException;
import java.io.EOFException;

import java.util.Enumeration;
import java.util.NoSuchElementException;
import java.util.Vector;

import org.jvending.messaging.IDataOctetTokenizer;
import org.jvending.messaging.ITokenizer;

import org.jvending.messaging.io.PeekInputStream;
import org.jvending.messaging.util.SimpleQueue;

import org.jvending.messaging.util.MmsDecodingUtility;

/**
 * @author Shane Isbell
 * @version 1.0.0a
 * @created 04/03/27
 */

public class WspTokenizer implements ITokenizer {

    protected PeekInputStream dis;

    protected TokenType tokenType;

    protected Object tokenObject;

    protected IDataOctetTokenizer dataTokenizer;

    protected ITokenizer mimeTokenizer;

    private boolean dataOctetFlag = false;

    private int length;

    private int tokenState;

    private boolean debugFlag = false;

    private SimpleQueue tokenStateQueue;

    public WspTokenizer(InputStream dis) {
        setInputStream(dis);
    }

    public WspTokenizer(PeekInputStream dis) {
        this.dis = dis;
    }

    public void setDataOctetTokenizer(IDataOctetTokenizer dataTokenizer) {
        this.dataTokenizer = dataTokenizer;
    }

    public void setInputStream(InputStream is) {
        dis = new PeekInputStream(is);
    }

    public void setInputStream(PeekInputStream is) {
        dis = is;
    }

    public void setMimeTokenizer(ITokenizer mimeTokenizer) {
        this.mimeTokenizer = mimeTokenizer;
    }

    private Token getTokenFromDataOctet() throws IOException {          
                tokenType = (TokenType) tokenStateQueue.dequeue();
                if(tokenType == Token.MULTI_OCTET_INTEGER) {                    
                      tokenObject = MmsDecodingUtility.readMultiOctetInteger(dis, length);
                } else if(tokenType == Token.SHORT_LENGTH) {
                      length = dis.readUnsignedByte();
                      tokenObject = new Integer(length);
                } else if(tokenType == Token.SHORT_INTEGER) {
                      tokenObject = new Integer((dis.readUnsignedByte() & 0x7f));
                } else if(tokenType == Token.TEXT_STRING) {
                      tokenObject = MmsDecodingUtility.readString(dis);
                } else if(tokenType == Token.DATA_OCTETS) {
                      tokenObject = MmsDecodingUtility.readDataOctets(dis, length);
                }
              return (new Token(tokenType, (Object) tokenObject));
    }

    public Object nextElement() throws NoSuchElementException {
        Token t = null;
        int i = -10;
        try {
            if(dataOctetFlag && tokenStateQueue != null && !tokenStateQueue.isEmpty() ) {
                t = getTokenFromDataOctet();
                return (Object) t;
            } else {
               dataOctetFlag = false;             
            } 
        
        i = dis.readByte();
        //System.out.println("BYTE:" + i);

        if(i >= 0 && i <= 31) {
            tokenObject = new Integer(i);
            tokenType = Token.SHORT_LENGTH;
            length = i;
            dataOctetFlag = true;
            tokenStateQueue = dataTokenizer.getTokenStateQueue(tokenState, dis.peekByte(1));
        } else if(i == 31) {
            tokenObject = MmsDecodingUtility.readUintvarInteger(dis);
            tokenType = Token.UINTVAR_INTEGER;
        } else if(i == 34) {
            tokenObject = MmsDecodingUtility.readString(dis);
            tokenType = Token.QUOTED_STRING;
        } else if(i == 127) {
            tokenObject = MmsDecodingUtility.readString(dis);
            tokenType = Token.TEXT_STRING;
        } else if(i >= 32 && i <= 127) {
            tokenObject = MmsDecodingUtility.readExtensionMedia(dis, i);
            tokenType = Token.EXTENSION_MEDIA;
        } else if(i >= 128 && i <= 255) {// anything above 127 consists of only one byte
            tokenObject = new Integer((i & 0x7f));
            tokenType = Token.SHORT_INTEGER;
            tokenState = i;
        } else if(i == -1) {
            tokenObject = null;
            tokenType = Token.EOF;
        } else {
            throw new NoSuchElementException("Illegal Octet: " + i);
        }
        } catch(IOException e) {
            throw new SecurityException("IOException occurred:" + i);
        }
        t = new Token(tokenType, (Object) tokenObject);
        return ((Object) t);
    }

    public boolean hasMoreElements() {
        return tokenType != Token.EOF;
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -