All Downloads are FREE. Search and download functionalities are using the official Maven repository.

uk.ac.diamond.scisoft.analysis.ThreadStreamReader Maven / Gradle / Ivy

/*
 * Copyright (c) 2012 Diamond Light Source Ltd.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 */

/*
 * Copied from PyDev and modified to remove PyDev dependencies
 */
package uk.ac.diamond.scisoft.analysis;

import java.io.InputStream;
import java.io.InputStreamReader;

/*package*/ final class ThreadStreamReader extends Thread {
    
    /**
     * Input stream read.
     */
    private final InputStream is;
    
    /**
     * Buffer with the contents gotten.
     */
    private final StringBuilder contents;
    
    /**
     * Access to the buffer should be synchronized.
     */
    private final Object lock = new Object();

    /**
     * Whether the read should be synchronized.
     */
    private final boolean synchronize;
    
    /**
     * Keeps the next unique identifier.
     */
    private static int next=0;
    
    /**
     * Get a unique identifier for this thread. 
     */
    private static synchronized int next(){
        next ++;
        return next;
    }

    public ThreadStreamReader(InputStream is) {
        this(is, true); //default is synchronize.
    }
    
    public ThreadStreamReader(InputStream is, boolean synchronize) {
        this.setName("ThreadStreamReader: "+next());
        this.setDaemon(true);
        contents = new StringBuilder();
        this.is = is;
        this.synchronize = synchronize;
    }

    @Override
	public void run() {
        try {
            InputStreamReader in = new InputStreamReader(is);
            int c;
            if(synchronize){
                while ((c = in.read()) != -1) {
                    synchronized(lock){
                        contents.append((char) c);
                    }
                }
            }else{
                while ((c = in.read()) != -1) {
                    contents.append((char) c);
                }
            }
        } catch (Exception e) {
            //that's ok
        }
    }

    public String getContents() {
        synchronized(lock){
            return contents.toString();
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy