Mercurial > repos > rliterman > csp2
diff 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 diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/opt/bbmap-39.01-1/current/fileIO/PipeThread.java Tue Mar 18 16:23:26 2025 -0400 @@ -0,0 +1,89 @@ +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); + +}