X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsonitus%2Fdata%2Ffilter%2FExternalFilter.java;h=497ba2ab289144f7e2f3ca698713f6abeb1f45c5;hb=00af65503a2076371291ce8e019da2546458bdac;hp=fa3a2d8d39c87eaa39a1417098b6ad53b53ce1b5;hpb=631032005069a2013cc80bf5471d2a6c6eccd065;p=sonitus.git diff --git a/src/main/java/net/pterodactylus/sonitus/data/filter/ExternalFilter.java b/src/main/java/net/pterodactylus/sonitus/data/filter/ExternalFilter.java index fa3a2d8..497ba2a 100644 --- a/src/main/java/net/pterodactylus/sonitus/data/filter/ExternalFilter.java +++ b/src/main/java/net/pterodactylus/sonitus/data/filter/ExternalFilter.java @@ -31,6 +31,7 @@ import net.pterodactylus.sonitus.data.Connection; import net.pterodactylus.sonitus.data.Filter; import net.pterodactylus.sonitus.data.Format; import net.pterodactylus.sonitus.data.Source; +import net.pterodactylus.sonitus.io.InputStreamDrainer; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; @@ -46,7 +47,7 @@ import com.google.common.io.ByteStreams; public abstract class ExternalFilter implements Filter { /** The logger. */ - private static final Logger logger = Logger.getLogger(ExternalFilter.class.getName()); + private final Logger logger = Logger.getLogger(getClass().getName()); /** The format of the source. */ private Format format; @@ -56,6 +57,7 @@ public abstract class ExternalFilter implements Filter { // // FILTER METHODS + // @Override public Format format() { @@ -66,6 +68,9 @@ public abstract class ExternalFilter implements Filter { public byte[] get(int bufferSize) throws EOFException, IOException { byte[] buffer = new byte[bufferSize]; int read = pipedInputStream.read(buffer); + if (read == -1) { + throw new EOFException(); + } return Arrays.copyOf(buffer, read); } @@ -81,18 +86,7 @@ public abstract class ExternalFilter implements Filter { final InputStream processError = process.getErrorStream(); final PipedOutputStream pipedOutputStream = new PipedOutputStream(); pipedInputStream = new PipedInputStream(pipedOutputStream); - new Thread(new Runnable() { - - @Override - public void run() { - try { - drainInputStream(processError); - } catch (IOException ioe1) { - /* ignore, just let the thread exit. */ - } - logger.finest("ExternalFilter: Reading stderr finished."); - } - }).start(); + new Thread(new InputStreamDrainer(processError)).start(); new Thread(new Runnable() { @Override @@ -102,7 +96,7 @@ public abstract class ExternalFilter implements Filter { } catch (IOException ioe1) { /* okay, just exit. */ } - logger.finest("ExternalFilter: Reading stdout finished."); + logger.finest("Reading stdout finished."); } }).start(); new Thread(new Connection(source) { @@ -152,17 +146,4 @@ public abstract class ExternalFilter implements Filter { */ protected abstract Iterable parameters(Format format); - // - // STATIC METHODS - // - - private static void drainInputStream(InputStream inputStream) throws IOException { - byte[] buffer = new byte[4096]; - int read; - while ((read = inputStream.read(buffer)) != -1) { - logger.finest(String.format("ExternalFilter: Drained %d Bytes.", read)); - /* do nothing, just read the damn thing. */ - } - } - }