Package org.exoplatform.commons.utils

Source Code of org.exoplatform.commons.utils.CharsetCharEncoder

/**
* Copyright (C) 2009 eXo Platform SAS.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/

package org.exoplatform.commons.utils;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;

/**
* An implementation of a char encoder that is stateless and is based on a specified charset.
*
* @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
* @version $Revision$
*/
public class CharsetCharEncoder implements CharEncoder
{

   private static final CharEncoder UTF8 = new CharsetCharEncoder(Charset.forName("UTF8"));

   private static final byte[] EMPTY = new byte[0];

   public static CharEncoder getUTF8()
   {
      return UTF8;
   }

   private final Charset charset;

   private final java.nio.CharBuffer in;

   private final ByteBuffer out;

   private final byte[][] arrays;

   public CharsetCharEncoder(Charset charset)
   {
      this.charset = charset;
      this.in = CharBuffer.allocate(1);
      this.out = ByteBuffer.allocate(100);
      this.arrays = new byte[][]{new byte[0], new byte[1], new byte[2], new byte[3], new byte[4], new byte[5]};
   }

   public Charset getCharset()
   {
      return charset;
   }

   public byte[] encode(char c)
   {
      /*
          switch (Character.getType(c)) {
            case Character.SURROGATE:
            case Character.PRIVATE_USE:
              return EMPTY;
            default:
              if (encoder.canEncode(c)) {
                in.rewind();
                out.rewind();
                in.put(0, c);
                encoder.reset();
                encoder.encode(in, out, true);
                encoder.flush(out);
                int length = out.position();
                byte[] bytes = arrays[length];
                System.arraycopy(out.array(), 0, bytes, 0, length);
                return bytes;
              }
              else {
                return EMPTY;
              }
          }
      */
      try
      {
         CharsetEncoder encoder = charset.newEncoder();
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         OutputStreamWriter writer = new OutputStreamWriter(baos, encoder);
         writer.write(c);
         writer.close();
         return baos.toByteArray();
      }
      catch (IOException e)
      {
         throw new AssertionError(e);
      }
   }

}
TOP

Related Classes of org.exoplatform.commons.utils.CharsetCharEncoder

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.