linkmessage.java

来自「This is a resource based on j2me embedde」· Java 代码 · 共 167 行

JAVA
167
字号
/* * * * Copyright  1990-2007 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER *  * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version * 2 only, as published by the Free Software Foundation. *  * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License version 2 for more details (a copy is * included at /legal/license.txt). *  * You should have received a copy of the GNU General Public License * version 2 along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA *  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 or visit www.sun.com if you need additional * information or have any questions. */package com.sun.midp.links;/** * Encapsulates some data to be sent between Isolates through a Link. */public class LinkMessage {    // IMPL_NOTE: force classloading of byte[] so that    // KNI_FindClass() will always find it.    static {        try {            Class.forName("[B");        } catch (ClassNotFoundException ignore) { }    }    Object contents;    // used only for data (byte-array) messages, otherwise zeroes    int offset; // = 0    int length; // = 0    /**     * Constructs a LinkMessage with the given contents, length, and offset      * values. Called only by the static factory methods.     */    private LinkMessage(Object newContents, int newOffset, int newLength) {        contents = newContents;        offset = newOffset;        length = newLength;    }    /**     * Constructs an empty LinkMessage. This is used only by Link.receive().     */    LinkMessage() {        this(null, 0, 0);    }    /**     * Queries whether the LinkMessage contains data, that is, a byte array.     */    public boolean containsData() {        return contents instanceof byte[];    }    /**     * Queries whether the LinkMessage contains a Link.     */    public boolean containsLink() {        return contents instanceof Link;    }    /**     * Queries whether the LinkMessage contains a String.     */    public boolean containsString() {        return contents instanceof String;    }    /**     * Returns the contents of the LinkMessage as an Object. The caller must      * test the reference returned using <code>instanceof</code> and cast it      * appropriately.     */    public Object extract() {        return contents;    }    /**     * Returns the contents of the LinkMessage if it contains a byte array. If     * the message does not contain a byte array, throws IllegalStateException.     */    public byte[] extractData() {        if (! (contents instanceof byte[])) {            throw new IllegalStateException();        }        byte[] data = (byte[])contents;        if (offset == 0 && length == data.length) {            return data;        }        // need to copy the subrange        byte[] newData = new byte[length];        System.arraycopy(data, offset, newData, 0, length);        return newData;    }    /**     * Returns the contents of the LinkMessage if it contains is a Link. If      * the message does not contain a Link, throws IllegalStateException.     */    public Link extractLink() {        if (contents instanceof Link) {            return (Link)contents;        } else {            throw new IllegalStateException();        }    }    /**     * Returns the contents of the LinkMessage if it contains is a String. If      * the message does not contain a String, throws IllegalStateException.     */    public String extractString() {        if (contents instanceof String) {            return (String)contents;        } else {            throw new IllegalStateException();        }    }    public static LinkMessage newDataMessage(byte[] data) {        return new LinkMessage(data, 0, data.length);    }    public static LinkMessage newDataMessage(            byte[] data, int offset, int length) {        if (offset < 0                || offset > data.length                || length < 0                || offset + length < 0                || offset + length > data.length) {            throw new IndexOutOfBoundsException();        }        return new LinkMessage(data, offset, length);    }    public static LinkMessage newLinkMessage(Link link) {        return new LinkMessage(link, 0, 0);    }    public static LinkMessage newStringMessage(String string) {        return new LinkMessage(string, 0, 0);    }}

⌨️ 快捷键说明

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