/**************************************************************** * Licensed to the Apache Software Foundation (ASF) under one * * or more contributor license agreements. See the NOTICE file * * distributed with this work for additional information * * regarding copyright ownership. The ASF licenses this file * * to you under the Apache License, Version 2.0 (the * * "License"); you may not use this file except in compliance * * with the License. You may obtain a copy of the License at * * * * http://www.apache.org/licenses/LICENSE-2.0 * * * * Unless required by applicable law or agreed to in writing, * * software distributed under the License is distributed on an * * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * * KIND, either express or implied. See the License for the * * specific language governing permissions and limitations * * under the License. * ****************************************************************/ package org.apache.james.mime4j.util; import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.charset.Charset; /** * Utility methods for converting textual content of a message. */ public class ContentUtil { private ContentUtil() { } /** * Encodes the specified string into an immutable sequence of bytes using * the US-ASCII charset. * * @param string * string to encode. * @return encoded string as an immutable sequence of bytes. */ public static ByteSequence encode(String string) { return encode(CharsetUtil.US_ASCII, string); } /** * Encodes the specified string into an immutable sequence of bytes using * the specified charset. * * @param charset * Java charset to be used for the conversion. * @param string * string to encode. * @return encoded string as an immutable sequence of bytes. */ public static ByteSequence encode(Charset charset, String string) { ByteBuffer encoded = charset.encode(CharBuffer.wrap(string)); ByteArrayBuffer bab = new ByteArrayBuffer(encoded.remaining()); bab.append(encoded.array(), encoded.position(), encoded.remaining()); return bab; } /** * Decodes the specified sequence of bytes into a string using the US-ASCII * charset. * * @param byteSequence * sequence of bytes to decode. * @return decoded string. */ public static String decode(ByteSequence byteSequence) { return decode(CharsetUtil.US_ASCII, byteSequence, 0, byteSequence .length()); } /** * Decodes the specified sequence of bytes into a string using the specified * charset. * * @param charset * Java charset to be used for the conversion. * @param byteSequence * sequence of bytes to decode. * @return decoded string. */ public static String decode(Charset charset, ByteSequence byteSequence) { return decode(charset, byteSequence, 0, byteSequence.length()); } /** * Decodes a sub-sequence of the specified sequence of bytes into a string * using the US-ASCII charset. * * @param byteSequence * sequence of bytes to decode. * @param offset * offset into the byte sequence. * @param length * number of bytes. * @return decoded string. */ public static String decode(ByteSequence byteSequence, int offset, int length) { return decode(CharsetUtil.US_ASCII, byteSequence, offset, length); } /** * Decodes a sub-sequence of the specified sequence of bytes into a string * using the specified charset. * * @param charset * Java charset to be used for the conversion. * @param byteSequence * sequence of bytes to decode. * @param offset * offset into the byte sequence. * @param length * number of bytes. * @return decoded string. */ public static String decode(Charset charset, ByteSequence byteSequence, int offset, int length) { if (byteSequence instanceof ByteArrayBuffer) { ByteArrayBuffer bab = (ByteArrayBuffer) byteSequence; return decode(charset, bab.buffer(), offset, length); } else { byte[] bytes = byteSequence.toByteArray(); return decode(charset, bytes, offset, length); } } private static String decode(Charset charset, byte[] buffer, int offset, int length) { return charset.decode(ByteBuffer.wrap(buffer, offset, length)) .toString(); } }