Mercurial > repos > rliterman > csp2
annotate 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 |
rev | line source |
---|---|
jpayne@68 | 1 package fileIO; |
jpayne@68 | 2 |
jpayne@68 | 3 import java.io.IOException; |
jpayne@68 | 4 import java.io.InputStream; |
jpayne@68 | 5 import java.io.OutputStream; |
jpayne@68 | 6 |
jpayne@68 | 7 /** |
jpayne@68 | 8 * Listens to an output stream and copies it to an input stream. |
jpayne@68 | 9 * For example, redirects the error stream of some process to stderr. |
jpayne@68 | 10 * @author Brian Bushnell |
jpayne@68 | 11 * @date Jan 22, 2013 |
jpayne@68 | 12 * |
jpayne@68 | 13 */ |
jpayne@68 | 14 public class PipeThread extends Thread { |
jpayne@68 | 15 |
jpayne@68 | 16 // public PipeThread(InputStream is_){this(is_, System.err);} |
jpayne@68 | 17 |
jpayne@68 | 18 public PipeThread(InputStream is_, OutputStream os_){ |
jpayne@68 | 19 is=is_; |
jpayne@68 | 20 os=os_; |
jpayne@68 | 21 if(is==null){throw new RuntimeException("Null input stream.");} |
jpayne@68 | 22 if(os==null){throw new RuntimeException("Null output stream.");} |
jpayne@68 | 23 // synchronized(list){list.add(this);} |
jpayne@68 | 24 } |
jpayne@68 | 25 |
jpayne@68 | 26 @Override |
jpayne@68 | 27 public void run(){ |
jpayne@68 | 28 final byte[] buf=new byte[8196]; |
jpayne@68 | 29 try { |
jpayne@68 | 30 for(int len=is.read(buf); !finished && len>0; len=is.read(buf)){ |
jpayne@68 | 31 os.write(buf, 0, len); |
jpayne@68 | 32 } |
jpayne@68 | 33 } catch (IOException e) { |
jpayne@68 | 34 // TODO Auto-generated catch block |
jpayne@68 | 35 e.printStackTrace(); |
jpayne@68 | 36 } |
jpayne@68 | 37 |
jpayne@68 | 38 if(is!=System.in){ |
jpayne@68 | 39 try { |
jpayne@68 | 40 is.close(); |
jpayne@68 | 41 } catch (IOException e) { |
jpayne@68 | 42 // TODO Auto-generated catch block |
jpayne@68 | 43 e.printStackTrace(); |
jpayne@68 | 44 } |
jpayne@68 | 45 } |
jpayne@68 | 46 |
jpayne@68 | 47 if(os!=System.out && os!=System.err){ |
jpayne@68 | 48 ReadWrite.close(os); |
jpayne@68 | 49 } |
jpayne@68 | 50 |
jpayne@68 | 51 synchronized(this){ |
jpayne@68 | 52 finished=true; |
jpayne@68 | 53 this.notify(); |
jpayne@68 | 54 } |
jpayne@68 | 55 } |
jpayne@68 | 56 |
jpayne@68 | 57 public boolean finished(){ |
jpayne@68 | 58 synchronized(this){ |
jpayne@68 | 59 return finished; |
jpayne@68 | 60 } |
jpayne@68 | 61 } |
jpayne@68 | 62 |
jpayne@68 | 63 public void terminate(){ |
jpayne@68 | 64 synchronized(this){ |
jpayne@68 | 65 if(!finished){ |
jpayne@68 | 66 finished=true; |
jpayne@68 | 67 interrupt(); |
jpayne@68 | 68 } |
jpayne@68 | 69 } |
jpayne@68 | 70 } |
jpayne@68 | 71 |
jpayne@68 | 72 // public static void killList(){ |
jpayne@68 | 73 // System.err.println("Kill list."); |
jpayne@68 | 74 // synchronized(list){ |
jpayne@68 | 75 // for(PipeThread pt : list){ |
jpayne@68 | 76 // if(!pt.finished){ |
jpayne@68 | 77 // pt.terminate(); |
jpayne@68 | 78 // } |
jpayne@68 | 79 // } |
jpayne@68 | 80 // } |
jpayne@68 | 81 // } |
jpayne@68 | 82 |
jpayne@68 | 83 public final InputStream is; |
jpayne@68 | 84 public final OutputStream os; |
jpayne@68 | 85 private volatile boolean finished=false; |
jpayne@68 | 86 |
jpayne@68 | 87 // private static ArrayList<PipeThread> list=new ArrayList<PipeThread>(8); |
jpayne@68 | 88 |
jpayne@68 | 89 } |