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 }