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

📄 textencoder.java

📁 OS(OpenSymphony)的SiteMesh是一个用来在JSP中实现页面布局和装饰(layout and decoration)的框架组件
💻 JAVA
字号:
/* This software is published under the terms of the OpenSymphony Software * License version 1.1, of which a copy has been included with this * distribution in the LICENSE.txt file. */package com.opensymphony.module.sitemesh.filter;import java.io.ByteArrayInputStream;import java.io.CharArrayWriter;import java.io.IOException;import java.io.InputStreamReader;import java.nio.ByteBuffer;import java.nio.CharBuffer;import java.nio.charset.Charset;import java.nio.charset.CharsetDecoder;import java.nio.charset.CoderResult;import java.nio.charset.CodingErrorAction;/** * Converts text stored in byte[] to char[] using specified encoding. * * @author <a href="mailto:scott@atlassian.com">Scott Farquhar</a> * @author <a href="mailto:hani@formicary.net">Hani Suleiman</a> * @author Joe Walnes * @version $Revision: 1.1 $*/public class TextEncoder {    private static final String DEFAULT_ENCODING = System.getProperty("file.encoding");    private static final boolean JDK14 =            System.getProperty("java.version").startsWith("1.4")            || System.getProperty("java.version").startsWith("1.5");    public char[] encode(byte[] data, String encoding) throws IOException {        if (encoding == null) {            encoding = DEFAULT_ENCODING;        }        if (JDK14) {            return get14Buffer(data, encoding);        } else {            return get13Buffer(data, encoding);        }    }    private char[] get13Buffer(byte[] data, String encoding) throws IOException {        CharArrayWriter out = null;        // Why all this indirection? Because we are being given bytes, and we have to then write        // them to characters. We need to know the encoding of the characterset that we are creating.        // The test that verifies this is InlineDecoratorTest (inline/page6.jsp).        InputStreamReader reader;        out = new CharArrayWriter();        if (encoding != null) {            reader = new InputStreamReader(new ByteArrayInputStream(data), encoding);        } else {            reader = new InputStreamReader(new ByteArrayInputStream(data));        }        int i;        while ((i = reader.read()) != -1) {            out.write(i);        }        return out.toCharArray();    }    private char[] get14Buffer(byte[] data, String encoding) throws IOException {        if (!Charset.isSupported(encoding)) throw new IOException("Unsupported encoding " + encoding);        Charset charset = Charset.forName(encoding);        CharsetDecoder cd = charset.newDecoder().onMalformedInput(CodingErrorAction.REPLACE).onUnmappableCharacter(CodingErrorAction.REPLACE);        int en = (int) (cd.maxCharsPerByte() * data.length);        char[] ca = new char[en];        ByteBuffer bb = ByteBuffer.wrap(data);        CharBuffer cb = CharBuffer.wrap(ca);        CoderResult cr = cd.decode(bb, cb, true);        if (!cr.isUnderflow()) {            cr.throwException();        }        cr = cd.flush(cb);        if (!cr.isUnderflow()) {            cr.throwException();        }        return trim(ca, cb.position());    }    private char[] trim(char[] ca, int len) {        if (len == ca.length) {            return ca;        }        char[] tca = new char[len];        System.arraycopy(ca, 0, tca, 0, len);        return tca;    }}

⌨️ 快捷键说明

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