blob: 659e261af16247a54f80cbf07f1bc8d7f8c4e3e0 [file] [log] [blame]
/****************************************************************
* 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();
}
}