From 84668c7e1579dcfdb324fecc33e8e1deac990607 Mon Sep 17 00:00:00 2001 From: TudbuT Date: Thu, 13 Jun 2024 16:34:53 +0200 Subject: [PATCH] allow stopping a TypedInputStream on EOF --- .../java/de/tudbut/io/TypedInputStream.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/main/java/de/tudbut/io/TypedInputStream.java b/src/main/java/de/tudbut/io/TypedInputStream.java index 8ee3b8a..b5ac6a7 100644 --- a/src/main/java/de/tudbut/io/TypedInputStream.java +++ b/src/main/java/de/tudbut/io/TypedInputStream.java @@ -1,5 +1,6 @@ package de.tudbut.io; +import java.io.EOFException; import java.io.IOException; import java.io.InputStream; @@ -12,7 +13,8 @@ public class TypedInputStream { public int last = -1; private final Object waitForInputLock = new Object(); private final Object readLock = new Object(); - + private boolean stopOnEOF = false; + public InputStream getStream() { return stream; } @@ -22,6 +24,11 @@ public class TypedInputStream { public TypedInputStream(InputStream stream) { this.stream = stream; } + + public TypedInputStream stopOnEOF() { + stopOnEOF = true; + return this; + } public byte readByte() throws IOException { return (byte) read(); @@ -141,16 +148,20 @@ public class TypedInputStream { synchronized (waitForInputLock) { if(last != -1) return; - while ((last = stream.read()) == -1) ; + while ((last = stream.read()) == -1 && !stopOnEOF) ; + if(last == -1) + throw new EOFException(); } } - + public int read() throws IOException { synchronized (readLock) { synchronized (waitForInputLock) { int i; if (last == -1) { - while ((i = stream.read()) == -1) ; + while ((i = stream.read()) == -1 && !stopOnEOF) ; + if(i == -1) + throw new EOFException(); } else { i = last;