resourcehandler.java

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

JAVA
173
字号
/* * * * 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.util;import javax.microedition.io.Connector;import com.sun.midp.io.j2me.storage.File;import com.sun.midp.io.j2me.storage.RandomAccessStream;import com.sun.midp.security.SecurityToken;import com.sun.midp.security.Permissions;import com.sun.midp.configurator.Constants;import com.sun.j2me.security.AccessController;/** * The ResourceHandler class is a system level utility class. * Its purpose is to return system resources as an array of bytes * based on a unique String identifier. All methods in this utility * class should be protected through use of the SecurityToken. */public class ResourceHandler {    /**     * Load a resource from the system and return it as a byte array.     * This method is used to load AMS icons.     *     * @param token the SecurityToken to use to grant permission to     *              execute this method.     * @param resource a String identifier which can uniquely describe     *                 the location of the resource to be loaded.     * @return a byte[] containing the resource retrieved from the     *         system. null if the resource could not be found.     */    public static byte[] getAmsResource(SecurityToken token,                                        String resource) {        return getResourceImpl(token, File.getStorageRoot(            Constants.INTERNAL_STORAGE_ID) + resource);    }    /**     * Load a resource from the system and return it as a byte array.     * This method is used to load system level resources, such as     * images, sounds, properties, etc.     *     * @param token the SecurityToken to use to grant permission to     *              execute this method.     * @param resource a String identifier which can uniquely describe     *                 the location of the resource to be loaded.     * @return a byte[] containing the resource retrieved from the     *         system. null if the resource could not be found.     */    public static byte[] getSystemResource(SecurityToken token,                                           String resource) {        return getResourceImpl(token, File.getConfigRoot(            Constants.INTERNAL_STORAGE_ID) + resource);    }    /**     * Load a system image resource from the system and return it as      * a byte array. The images are stored in the configuration      * directory ($MIDP_HOME/lib).     *     * @param token the SecurityToken to use to grant permission to     *              execute this method.     * @param imageName name of the image     * @return a byte[] containing the resource retrieved from the     *         system. null if the resource could not be found.     * @throws IllegalArgumentException if imageName contains a "/" or "\\",     *        or imageName is null or imageName is empty     */    public static byte[] getSystemImageResource(SecurityToken token,                     String imageName) {        byte[] imageData = getAmsResource(token, imageName + ".raw");        if (imageData == null) {            imageData = getAmsResource(token, imageName + ".png");        }                return imageData;    }       /**     * Load a resource from the system and return it as a byte array.     * This method is used to load system level resources, such as     * images, sounds, properties, etc.     *     * @param token the SecurityToken to use to grant permission to     *              execute this method.     * @param resourceFilename full path to the file containing the resource.     * @return a byte[] containing the resource retrieved from the     *         system. null if the resource could not be found.     */    private static byte[] getResourceImpl(SecurityToken token,            String resourceFilename) {        if (token != null) {            token.checkIfPermissionAllowed(Permissions.MIDP);        } else {            AccessController.checkPermission(Permissions.AMS_PERMISSION_NAME);        }        // converting the file name into the resource name        int start = resourceFilename.lastIndexOf('/');        if (start < 0) {            start = resourceFilename.lastIndexOf('\\');        }        if (start < 0) {            start = 0;        } else {            start++;        }        String resourceName = resourceFilename.substring(start,                resourceFilename.length());        resourceName = resourceName.replace('.', '_');        //        byte[] resourceBuffer = loadRomizedResource0(resourceName);        if (resourceBuffer == null) {            RandomAccessStream stream;            if (token != null) {                stream = new RandomAccessStream(token);            } else {                stream = new RandomAccessStream();            }            try {                stream.connect(resourceFilename, Connector.READ);                resourceBuffer = new byte[stream.getSizeOf()];                stream.readBytes(resourceBuffer, 0, resourceBuffer.length);            } catch (java.io.IOException e) {                resourceBuffer = null;            } finally {                try {                    stream.disconnect();                } catch (java.io.IOException ignored) {                }            }        }        return resourceBuffer;    }    /**     * Retrieves a romized resource with the given name.     *     * @param resourceName name of the resource to load     *     * @return requested resource as an array of bytes or NULL if not found     */    private static native byte[] loadRomizedResource0(String resourceName);}

⌨️ 快捷键说明

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