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

📄 helper.java

📁 已经移植好的java虚拟机
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
            /* Construct a new instance */            return (StreamWriter)clazz.newInstance();        } catch(ClassNotFoundException x) {            throw new UnsupportedEncodingException("Encoding "+name+" not found");        } catch(InstantiationException x) {            throw new RuntimeException("InstantiationException "+x.getMessage());        } catch(IllegalAccessException x) {            throw new RuntimeException("IllegalAccessException "+x.getMessage());        } catch(ClassCastException x) {            throw new RuntimeException("ClassCastException "+x.getMessage());        }    }    /**     * Convert a byte array to a char array     *     * @param  buffer          The byte array buffer     * @param  offset          The offset     * @param  length          The length     * @return                 A new char array     */    public static char[] byteToCharArray(byte[] buffer, int offset, int length) {        try {            return byteToCharArray(buffer, offset, length, defaultEncoding);        } catch(UnsupportedEncodingException x) {            throw new RuntimeException("Missing default encoding "+defaultEncoding);        }    }    /**     * Convert a char array to a byte array     *     * @param  buffer          The char array buffer     * @param  offset          The offset     * @param  length          The length     * @return                 A new byte array     */    public static byte[] charToByteArray(char[] buffer, int offset, int length) {        try {            return charToByteArray(buffer, offset, length, defaultEncoding);        } catch(UnsupportedEncodingException x) {            throw new RuntimeException("Missing default encoding "+defaultEncoding);        }    }    /*     * Cached variables for byteToCharArray     */    private static String lastReaderEncoding;    private static StreamReader  lastReader;    /**     * Convert a byte array to a char array     *     * @param  buffer          The byte array buffer     * @param  offset          The offset     * @param  length          The length     * @param  enc             The character encoding     * @return                 A new char array     * @exception UnsupportedEncodingException  If the encoding is not known     */    public static synchronized char[] byteToCharArray(byte[] buffer, int offset, int length, String enc) throws UnsupportedEncodingException {        if (offset < 0) {            throw new IndexOutOfBoundsException(Integer.toString(offset));        }        if (length < 0) {            throw new IndexOutOfBoundsException(Integer.toString(length));        }        // Note: offset or length might be near -1>>>1.        if (offset > buffer.length - length) {            throw new IndexOutOfBoundsException(                Integer.toString(offset + length));        }        /* If we don't have a cached reader then make one */        if(lastReaderEncoding == null || !lastReaderEncoding.equals(enc)) {            lastReader = getStreamReaderPrim(enc);            lastReaderEncoding = enc;        }        /* Ask the reader for the size the output will be */        int size = lastReader.sizeOf(buffer, offset, length);        /* Allocate a buffer of that size */        char[] outbuf = new char[size];        /* Open the reader on a ByteArrayInputStream */        lastReader.open(new ByteArrayInputStream(buffer, offset, length), enc);        try {            /* Read the input */            lastReader.read(outbuf, 0, size);            /* Close the reader */            lastReader.close();        } catch(IOException x) {            throw new RuntimeException("IOException reading reader "+x.getMessage());        }        /* And return the buffer */        return outbuf;    }    /*     * Cached variables for charToByteArray     */    private static String lastWriterEncoding;    private static StreamWriter lastWriter;    /**     * Convert a char array to a byte array     *     * @param  buffer          The char array buffer     * @param  offset          The offset     * @param  length          The length     * @param  enc             The character encoding     * @return                 A new byte array     * @exception UnsupportedEncodingException  If the encoding is not known     */    public static synchronized byte[] charToByteArray(char[] buffer, int offset, int length, String enc) throws UnsupportedEncodingException {        /* If we don't have a cached writer then make one */        if(lastWriterEncoding == null || !lastWriterEncoding.equals(enc)) {            lastWriter = getStreamWriterPrim(enc);            lastWriterEncoding = enc;        }        /* Ask the writeer for the size the output will be */        int size = lastWriter.sizeOf(buffer, offset, length);        /* Get the output stream */        ByteArrayOutputStream os = new ByteArrayOutputStream(size);        /* Open the writer */        lastWriter.open(os, enc);        try {            /* Convert */            lastWriter.write(buffer, offset, length);            /* Close the writer */            lastWriter.close();        } catch(IOException x) {            throw new RuntimeException("IOException writing writer "+x.getMessage());        }        /* Close the output stream */        try {            os.close();        } catch(IOException x) {};        /* Return the array */        return os.toByteArray();    }    /**     * Get the internal name for an encoding.     *     * @param encodingName encoding name     *     * @return internal name for this encoding     */    private static String internalNameForEncoding(String encodingName) {        String internalName;        String property;        internalName = normalizeEncodingName(encodingName);        // The preferred mime name according to the IANA Charset Registry.        if (internalName.equals("US_ASCII")) {            /*             * US-ASCII is subclass of ISO-8859-1 so we do not need a             * separate reader for it.             */            return "ISO8859_1";        }        // The preferred mime name according to the IANA Charset Registry.        if (internalName.equals("ISO_8859_1")) {            return "ISO8859_1";        }        /*         * Since IANA character encoding names can start with a digit         * and that some Reader class names that do not match the standard         * name, we have a way to configure alternate names for encodings.         *         * Note: The names must normalized, digits, upper case only with "_"         *       and "_" substituted for ":" and "-".         */        property = System.getProperty(internalName + "_InternalEncodingName");        if (property != null) {            return property;        }        return internalName;    }    /**     * Converts "-" and ":" in a string to "_" and converts the name     * to upper case.     * This is needed because the names of IANA character encodings have     * characters that are not allowed for java class names and     * IANA encoding names are not case sensitive.     *     * @param encodingName encoding name     *     * @return normalized name     */    private static String normalizeEncodingName(String encodingName) {        StringBuffer normalizedName ;        char currentChar;        normalizedName = new StringBuffer(encodingName);        for (int i = 0; i < normalizedName.length(); i++) {            currentChar = normalizedName.charAt(i);            if (currentChar == '-' || currentChar == ':') {                normalizedName.setCharAt(i, '_');            } else {                normalizedName.setCharAt(i, Character.toUpperCase(currentChar));            }        }        return normalizedName.toString();    }}

⌨️ 快捷键说明

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