Mercurial > repos > rliterman > csp2
view CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/opt/bbmap-39.01-1/current/fileIO/PipeThread.java @ 68:5028fdace37b
planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author | jpayne |
---|---|
date | Tue, 18 Mar 2025 16:23:26 -0400 |
parents | |
children |
line wrap: on
line source
package fileIO; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; /** * Listens to an output stream and copies it to an input stream. * For example, redirects the error stream of some process to stderr. * @author Brian Bushnell * @date Jan 22, 2013 * */ public class PipeThread extends Thread { // public PipeThread(InputStream is_){this(is_, System.err);} public PipeThread(InputStream is_, OutputStream os_){ is=is_; os=os_; if(is==null){throw new RuntimeException("Null input stream.");} if(os==null){throw new RuntimeException("Null output stream.");} // synchronized(list){list.add(this);} } @Override public void run(){ final byte[] buf=new byte[8196]; try { for(int len=is.read(buf); !finished && len>0; len=is.read(buf)){ os.write(buf, 0, len); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } if(is!=System.in){ try { is.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(os!=System.out && os!=System.err){ ReadWrite.close(os); } synchronized(this){ finished=true; this.notify(); } } public boolean finished(){ synchronized(this){ return finished; } } public void terminate(){ synchronized(this){ if(!finished){ finished=true; interrupt(); } } } // public static void killList(){ // System.err.println("Kill list."); // synchronized(list){ // for(PipeThread pt : list){ // if(!pt.finished){ // pt.terminate(); // } // } // } // } public final InputStream is; public final OutputStream os; private volatile boolean finished=false; // private static ArrayList<PipeThread> list=new ArrayList<PipeThread>(8); }