jDoc + code cleanup
authorNiki Roo <niki@nikiroo.be>
Sat, 27 Apr 2019 13:41:53 +0000 (15:41 +0200)
committerNiki Roo <niki@nikiroo.be>
Sat, 27 Apr 2019 13:41:53 +0000 (15:41 +0200)
src/be/nikiroo/utils/BufferedInputStream.java
src/be/nikiroo/utils/ReplaceInputStream.java

index 9b95574b8165ea8d093cafe4869b8b307886a8ac..b236f8dac290d5406f18c8e758e62804a3f0af1c 100644 (file)
@@ -14,9 +14,13 @@ import java.util.Arrays;
  * @author niki
  */
 public class BufferedInputStream extends InputStream {
+       /** The current position in the buffer. */
        protected int pos;
+       /** The index of the last usable position of the buffer. */
        protected int len;
+       /** The buffer itself. */
        protected byte[] buffer;
+       /** An End-Of-File (or buffer, here) marker. */
        protected boolean eof;
 
        private boolean closed;
@@ -112,12 +116,42 @@ public class BufferedInputStream extends InputStream {
                return this;
        }
 
-       // max is buffer.size !
+       /**
+        * Check if the current content (what will be read next) starts with the
+        * given search term.
+        * <p>
+        * Note: the search term size <b>must</b> be smaller or equal the internal
+        * buffer size.
+        * 
+        * @param search
+        *            the term to search for
+        * 
+        * @return TRUE if the content that will be read starts with it
+        * 
+        * @throws IOException
+        *             in case of I/O error or if the size of the search term is
+        *             greater than the internal buffer
+        */
        public boolean startsWiths(String search) throws IOException {
                return startsWith(search.getBytes("UTF-8"));
        }
 
-       // max is buffer.size !
+       /**
+        * Check if the current content (what will be read next) starts with the
+        * given search term.
+        * <p>
+        * Note: the search term size <b>must</b> be smaller or equal the internal
+        * buffer size.
+        * 
+        * @param search
+        *            the term to search for
+        * 
+        * @return TRUE if the content that will be read starts with it
+        * 
+        * @throws IOException
+        *             in case of I/O error or if the size of the search term is
+        *             greater than the internal buffer
+        */
        public boolean startsWith(byte[] search) throws IOException {
                if (search.length > originalBuffer.length) {
                        throw new IOException(
@@ -133,7 +167,7 @@ public class BufferedInputStream extends InputStream {
 
                if (available() >= search.length) {
                        // Easy path
-                       return startsWith(search, buffer, pos);
+                       return startsWith(search, buffer, pos, len);
                } else if (!eof) {
                        // Harder path
                        if (buffer2 == null && buffer.length == originalBuffer.length) {
@@ -149,9 +183,7 @@ public class BufferedInputStream extends InputStream {
                                len2 += pos2;
                        }
 
-                       if (available() + (len2 - pos2) >= search.length) {
-                               return startsWith(search, buffer2, pos2);
-                       }
+                       return startsWith(search, buffer2, pos2, len2);
                }
 
                return false;
@@ -288,6 +320,9 @@ public class BufferedInputStream extends InputStream {
         * closed when you have called {@link BufferedInputStream#close()} once more
         * than {@link BufferedInputStream#open()}.
         * 
+        * @param includingSubStream
+        *            also close the under-laying stream
+        * 
         * @exception IOException
         *                in case of I/O error
         */
@@ -381,12 +416,41 @@ public class BufferedInputStream extends InputStream {
        protected void checkClose() throws IOException {
                if (closed) {
                        throw new IOException(
-                                       "This NextableInputStream was closed, you cannot use it anymore.");
+                                       "This BufferedInputStream was closed, you cannot use it anymore.");
                }
        }
 
-       // buffer must be > search
-       static protected boolean startsWith(byte[] search, byte[] buffer, int offset) {
+       /**
+        * Check if the buffer starts with the given search term (given as an array,
+        * a start position and a end position).
+        * <p>
+        * Note: the parameter <tt>len</tt> is the <b>index</b> of the last
+        * position, <b>not</b> the length.
+        * <p>
+        * Note: the search term size <b>must</b> be smaller or equal the internal
+        * buffer size.
+        * 
+        * @param search
+        *            the term to search for
+        * @param buffer
+        *            the buffer to look into
+        * @param offset
+        *            the offset at which to start the search
+        * @param len
+        *            the maximum index of the data to check (this is <b>not</b> a
+        *            length, but an index)
+        * 
+        * @return TRUE if the search content is present at the given location and
+        *         does not exceed the <tt>len</tt> index
+        */
+       static protected boolean startsWith(byte[] search, byte[] buffer,
+                       int offset, int len) {
+
+               // Check if there even is enough space for it
+               if (search.length > (len - offset)) {
+                       return false;
+               }
+
                boolean same = true;
                for (int i = 0; i < search.length; i++) {
                        if (search[i] != buffer[offset + i]) {
index ff2ec88ef6581f51905c4afe53c8453098e79e1a..a456463b79032585a1c6372656265c4f089495c6 100644 (file)
@@ -69,7 +69,7 @@ public class ReplaceInputStream extends BufferedInputStream {
                // Note: very simple, not efficient implementation, sorry.
                int count = 0;
                while (spos < slen && count < buffer.length - to.length) {
-                       if (from.length > 0 && startsWith(from, source, spos)) {
+                       if (from.length > 0 && startsWith(from, source, spos, slen)) {
                                System.arraycopy(to, 0, buffer, spos, to.length);
                                count += to.length;
                                spos += from.length;