/** * Copyright (C) 2003-2008 eXo Platform SAS. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License * as published by the Free Software Foundation; either version 3 * of the License, or (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see<http://www.gnu.org/licenses/>. */ package org.etk.core.rest.impl.provider; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.Reader; import java.io.Writer; import java.nio.charset.Charset; /** * @author <a href="mailto:andrew00x@gmail.com">Andrey Parfonov</a> * @version $Id: $ */ public final class IOHelper { /** * Default character set name. */ static final String DEFAULT_CHARSET_NAME = "UTF-8"; /** * If character set was not specified then this will be used. */ static final Charset DEFAULT_CHARSET = Charset.forName(DEFAULT_CHARSET_NAME); /** * Constructor. */ private IOHelper() { } /** * Write data from {@link InputStream} to {@link OutputStream}. * * @param in See {@link InputStream} * @param out See {@link OutputStream} * @throws IOException if i/o errors occurs */ static void write(InputStream in, OutputStream out) throws IOException { byte[] buf = new byte[1024]; int rd = -1; while ((rd = in.read(buf)) != -1) out.write(buf, 0, rd); } /** * Write data from {@link Reader} to {@link Writer}. * * @param in See {@link Reader} * @param out See {@link Writer} * @throws IOException if i/o errors occurs */ static void write(Reader in, Writer out) throws IOException { char[] buf = new char[1024]; int rd = -1; while ((rd = in.read(buf)) != -1) out.write(buf, 0, rd); } /** * Read String from given {@link InputStream}. * * @param in source stream for reading * @param cs character set, if null then {@link #DEFAULT_CHARSET} will be used * @return resulting String * @throws IOException if i/o errors occurs */ static String readString(InputStream in, String cs) throws IOException { Charset charset; // Must respect application specified character set. // For output if specified character set is not supported then UTF-8 should // be used instead. try { charset = cs != null ? Charset.forName(cs) : DEFAULT_CHARSET; } catch (Exception e) { charset = DEFAULT_CHARSET; } Reader r = new InputStreamReader(in, charset); char[] buf = new char[1024]; StringBuffer sb = new StringBuffer(); int rd = -1; while ((rd = r.read(buf)) != -1) sb.append(buf, 0, rd); return sb.toString(); } /** * Write String to {@link OutputStream}. * * @param s String * @param out See {@link OutputStream} * @param cs character set, if null then {@link #DEFAULT_CHARSET} will be used * @throws IOException if i/o errors occurs */ static void writeString(String s, OutputStream out, String cs) throws IOException { Charset charset; // Must respect application specified character set. // For output if specified character set is not supported then UTF-8 should // be used instead. try { charset = cs != null ? Charset.forName(cs) : DEFAULT_CHARSET; } catch (Exception e) { charset = DEFAULT_CHARSET; } Writer w = new OutputStreamWriter(out, charset); try { w.write(s); } finally { w.flush(); w.close(); } } }