// =========================================================================== // Copyright (c) 1996 Mort Bay Consulting Pty. Ltd. All rights reserved. // $Id: IO.java,v 1.15.2.5 2003/07/11 00:55:02 jules_gosnell Exp $ // --------------------------------------------------------------------------- package org.mortbay.util; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.Reader; import java.io.Writer; /* ======================================================================== */ /** IO Utilities. * Provides stream handling utilities in * singleton Threadpool implementation accessed by static members. */ public class IO extends ThreadPool { /* ------------------------------------------------------------------- */ public final static String CRLF = "\015\012"; /* ------------------------------------------------------------------- */ public final static byte[] CRLF_BYTES = {(byte)'\015',(byte)'\012'}; /* ------------------------------------------------------------------- */ public static int bufferSize = 8192; /* ------------------------------------------------------------------- */ private static class Singleton { static final IO __instance=new IO(); static { try{__instance.start();} catch(Exception e){Code.fail(e);} } } public static IO instance() { return Singleton.__instance; } /* ------------------------------------------------------------------- */ static class Job { InputStream in; OutputStream out; Reader read; Writer write; Job(InputStream in,OutputStream out) { this.in=in; this.out=out; this.read=null; this.write=null; } Job(Reader read,Writer write) { this.in=null; this.out=null; this.read=read; this.write=write; } } /* ------------------------------------------------------------------- */ /** Copy Stream in to Stream out until EOF or exception. * in own thread */ public static void copyThread(InputStream in, OutputStream out) { try{ instance().run(new Job(in,out)); } catch(InterruptedException e) { Code.warning(e); } } /* ------------------------------------------------------------------- */ /** 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 Stream in to Stream out until EOF or exception * in own thread */ public static void copyThread(Reader in, Writer out) { try { instance().run(new Job(in,out)); } catch(InterruptedException e) { Code.warning(e); } } /* ------------------------------------------------------------------- */ /** 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) { if (byteCount=0) { while (byteCount>0) { if (byteCount