Mercurial Hosting > luan
view src/org/eclipse/jetty/util/IO.java @ 1022:3718afd99988
HttpHeaders uses StringCache
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Tue, 01 Nov 2016 01:04:46 -0600 |
parents | 2bb375e94f64 |
children |
line wrap: on
line source
// // ======================================================================== // Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd. // ------------------------------------------------------------------------ // All rights reserved. This program and the accompanying materials // are made available under the terms of the Eclipse Public License v1.0 // and Apache License v2.0 which accompanies this distribution. // // The Eclipse Public License is available at // http://www.eclipse.org/legal/epl-v10.html // // The Apache License v2.0 is available at // http://www.opensource.org/licenses/apache2.0.php // // You may elect to redistribute this code under either of these licenses. // ======================================================================== // package org.eclipse.jetty.util; import java.io.ByteArrayOutputStream; import java.io.Closeable; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.io.Reader; import java.io.StringWriter; import java.io.Writer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /* ======================================================================== */ /** IO Utilities. * Provides stream handling utilities in * singleton Threadpool implementation accessed by static members. */ public class IO { private static final Logger LOG = LoggerFactory.getLogger(IO.class); /* ------------------------------------------------------------------- */ private static int bufferSize = 64*1024; /* ------------------------------------------------------------------- */ /** Copy Stream in to Stream out until EOF or exception. */ public static void copy(InputStream in, OutputStream out) throws IOException { copy(in,out,-1); } /* ------------------------------------------------------------------- */ /** Copy Reader to Writer out until EOF or exception. */ public static void copy(Reader in, Writer out) throws IOException { copy(in,out,-1); } /* ------------------------------------------------------------------- */ /** Copy Stream in to Stream for byteCount bytes or until EOF or exception. */ public static void copy(InputStream in, OutputStream out, long byteCount) throws IOException { byte buffer[] = new byte[bufferSize]; int len=bufferSize; if (byteCount>=0) { while (byteCount>0) { int max = byteCount<bufferSize?(int)byteCount:bufferSize; len=in.read(buffer,0,max); if (len==-1) break; byteCount -= len; out.write(buffer,0,len); } } else { while (true) { len=in.read(buffer,0,bufferSize); if (len<0 ) break; out.write(buffer,0,len); } } } /* ------------------------------------------------------------------- */ /** Copy Reader to Writer for byteCount bytes or until EOF or exception. */ public static void copy(Reader in, Writer out, long byteCount) throws IOException { char buffer[] = new char[bufferSize]; int len=bufferSize; if (byteCount>=0) { while (byteCount>0) { if (byteCount<bufferSize) len=in.read(buffer,0,(int)byteCount); else len=in.read(buffer,0,bufferSize); if (len==-1) break; byteCount -= len; out.write(buffer,0,len); } } else if (out instanceof PrintWriter) { PrintWriter pout=(PrintWriter)out; while (!pout.checkError()) { len=in.read(buffer,0,bufferSize); if (len==-1) break; out.write(buffer,0,len); } } else { while (true) { len=in.read(buffer,0,bufferSize); if (len==-1) break; out.write(buffer,0,len); } } } /* ------------------------------------------------------------ */ /** Copy files or directories * @param from * @param to * @throws IOException */ public static void copy(File from,File to) throws IOException { if (from.isDirectory()) copyDir(from,to); else copyFile(from,to); } /* ------------------------------------------------------------ */ public static void copyDir(File from,File to) throws IOException { if (to.exists()) { if (!to.isDirectory()) throw new IllegalArgumentException(to.toString()); } else to.mkdirs(); File[] files = from.listFiles(); if (files!=null) { for (int i=0;i<files.length;i++) { String name = files[i].getName(); if (".".equals(name) || "..".equals(name)) continue; copy(files[i],new File(to,name)); } } } /* ------------------------------------------------------------ */ public static void copyFile(File from,File to) throws IOException { FileInputStream in=new FileInputStream(from); FileOutputStream out=new FileOutputStream(to); copy(in,out); in.close(); out.close(); } /* ------------------------------------------------------------ */ /** * closes any {@link Closeable} * * @param c the closeable to close */ public static void close(Closeable c) { try { if (c != null) c.close(); } catch (IOException e) { LOG.trace("",e); } } /** * closes an input stream, and logs exceptions * * @param is the input stream to close */ public static void close(InputStream is) { try { if (is != null) is.close(); } catch (IOException e) { LOG.trace("",e); } } /** * closes a reader, and logs exceptions * * @param reader the reader to close */ public static void close(Reader reader) { try { if (reader != null) reader.close(); } catch (IOException e) { LOG.trace("",e); } } /** * closes a writer, and logs exceptions * * @param writer the writer to close */ public static void close(Writer writer) { try { if (writer != null) writer.close(); } catch (IOException e) { LOG.trace("",e); } } /* ------------------------------------------------------------ */ /** * closes an output stream, and logs exceptions * * @param os the output stream to close */ public static void close(OutputStream os) { try { if (os != null) os.close(); } catch (IOException e) { LOG.trace("",e); } } /* ------------------------------------------------------------ */ /** * @return An outputstream to nowhere */ public static InputStream getClosedStream() { return __closedStream; } /* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */ private static class ClosedIS extends InputStream { @Override public int read() throws IOException { return -1; } } private static ClosedIS __closedStream = new ClosedIS(); }