package htsjdk.tribble.readers;
import htsjdk.samtools.Defaults;
import htsjdk.samtools.util.CloserUtil;
import htsjdk.tribble.TribbleException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
/**
* A collection of factories for generating {@link LineReader}s.
*
* @author mccowan
*/
public class LineReaderUtil {
public enum LineReaderOption {
ASYNCHRONOUS, SYNCHRONOUS
}
/**
* Like {@link #fromBufferedStream(java.io.InputStream, LineReaderUtil.LineReaderOption)}, but the synchronicity
* option is determined by {@link htsjdk.samtools.Defaults}: if asynchronous I/O is enabled, an asynchronous line reader will be
* returned.
*/
public static LineReader fromBufferedStream(final InputStream stream) {
return fromBufferedStream(stream, Defaults.USE_ASYNC_IO ? LineReaderOption.ASYNCHRONOUS : LineReaderOption.SYNCHRONOUS);
}
/**
* Convenience factory for composing a LineReader from an InputStream.
*/
public static LineReader fromBufferedStream(final InputStream bufferedStream, final LineReaderOption option) {
final InputStreamReader bufferedInputStreamReader = new InputStreamReader(bufferedStream);
switch (option) {
case ASYNCHRONOUS:
return new AsynchronousLineReader(bufferedInputStreamReader);
case SYNCHRONOUS:
return new LineReader() {
final LongLineBufferedReader reader = new LongLineBufferedReader(bufferedInputStreamReader);
@Override
public String readLine() {
try {
return reader.readLine();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@Override
public void close() {
CloserUtil.close(reader);
}
};
default:
throw new TribbleException(String.format("Unrecognized LineReaderUtil option: %s.", option));
}
}
}