All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jsmpp.util.StrictBufferedInputStream Maven / Gradle / Ivy

There is a newer version: 15.0.0.1
Show newest version
package org.jsmpp.util;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;

/**
 * There were some ongoing bugs related to use of DataInputStream in conjunction
 * with BufferedInputStream. Listed below:
 * http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4112757
 * http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4030995
 * http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4401235
 * http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4100022
 * http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4479751
 * http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6192696
 * 
 * This class can be used a drop-in replacement for BufferedInputStream and
 * provides a workaround to the faulty behavior in BufferedInputStream.
 * 
 * Adapted from the comment by [email protected] at the URL below:
 * http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4030995
 * 
 * @author Shantanu Kumar ([email protected])
 * 
 */
public class StrictBufferedInputStream extends BufferedInputStream {

    public StrictBufferedInputStream(final InputStream in) {
        super(in);
    }

    public StrictBufferedInputStream(final InputStream in, final int size) {
        super(in, size);
    }

    /** Workaround for an unexpected behavior of 'BufferedInputStream'! */
    @Override
    public int read(final byte[] buffer, final int bufPos, final int length)
            throws IOException {
        int i = super.read(buffer, bufPos, length);
        if ((i == length) || (i == -1))
            return i;
        int j = super.read(buffer, bufPos + i, length - i);
        if (j == -1)
            return i;
        return j + i;
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy