X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fjexer%2Fio%2FTimeoutInputStream.java;h=3d8cdb0312494293b5e90bdeee39c5f21b32f659;hb=12b90437b5f22c2ae6e9b9b14c3b62b60f6143e5;hp=db9eb4a6006897ea1a576c123cea0df0acf23a68;hpb=42873e30bf487bc0b695d60652dba44f82185dbb;p=fanfix.git diff --git a/src/jexer/io/TimeoutInputStream.java b/src/jexer/io/TimeoutInputStream.java index db9eb4a..3d8cdb0 100644 --- a/src/jexer/io/TimeoutInputStream.java +++ b/src/jexer/io/TimeoutInputStream.java @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (C) 2017 Kevin Lamonte + * Copyright (C) 2019 Kevin Lamonte * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -37,6 +37,10 @@ import java.io.InputStream; */ public class TimeoutInputStream extends InputStream { + // ------------------------------------------------------------------------ + // Variables -------------------------------------------------------------- + // ------------------------------------------------------------------------ + /** * The wrapped stream. */ @@ -54,12 +58,9 @@ public class TimeoutInputStream extends InputStream { */ private volatile boolean cancel = false; - /** - * Request that the current read() operation timeout immediately. - */ - public synchronized void cancelRead() { - cancel = true; - } + // ------------------------------------------------------------------------ + // Constructors ----------------------------------------------------------- + // ------------------------------------------------------------------------ /** * Public constructor, at the default timeout of 10000 millis (10 @@ -93,6 +94,10 @@ public class TimeoutInputStream extends InputStream { this.timeoutMillis = timeoutMillis; } + // ------------------------------------------------------------------------ + // InputStream ------------------------------------------------------------ + // ------------------------------------------------------------------------ + /** * Reads the next byte of data from the input stream. * @@ -174,8 +179,11 @@ public class TimeoutInputStream extends InputStream { // available. If not, we throw ReadTimeoutException. long checkTime = System.currentTimeMillis(); while (stream.available() == 0) { - long now = System.currentTimeMillis(); + if (remaining > 0) { + return (b.length - remaining); + } + long now = System.currentTimeMillis(); synchronized (this) { if ((now - checkTime > timeoutMillis) || (cancel == true)) { if (cancel == true) { @@ -209,7 +217,9 @@ public class TimeoutInputStream extends InputStream { "on?"); } remaining -= rc; - return rc; + if (remaining == 0) { + return b.length; + } } } @@ -250,6 +260,10 @@ public class TimeoutInputStream extends InputStream { // available. If not, we throw ReadTimeoutException. long checkTime = System.currentTimeMillis(); while (stream.available() == 0) { + if (remaining > 0) { + return (len - remaining); + } + long now = System.currentTimeMillis(); synchronized (this) { if ((now - checkTime > timeoutMillis) || (cancel == true)) { @@ -283,7 +297,10 @@ public class TimeoutInputStream extends InputStream { "available, but read() returned -1. What is going " + "on?"); } - return rc; + remaining -= rc; + if (remaining == 0) { + return len; + } } } @@ -362,4 +379,15 @@ public class TimeoutInputStream extends InputStream { return stream.skip(n); } + // ------------------------------------------------------------------------ + // TimeoutInputStream ----------------------------------------------------- + // ------------------------------------------------------------------------ + + /** + * Request that the current read() operation timeout immediately. + */ + public synchronized void cancelRead() { + cancel = true; + } + }