Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
 package org.jruby.util;
 
Use mark to make a safe rewindable cursor. This assume you know the stream supports mark().
 
public class InputStreamMarkCursor {
    private InputStream in;
    private int i = 0;
    private int markSize;
    private int actualReadTotal;
    private byte[] buf;
    private int endPoint = 0;
    public InputStreamMarkCursor(InputStream inint markSize) {
        this. = in;
        this. = markSize;
         = new byte[0];
    }
    public int read() throws IOException {
        if (. == 0 ||  > .) { // overflow mark
            if (. != 0) {
                .reset(); // only reset if we have an active mark
            }
             = new byte[. + ];
            .mark(. + );
             = .read(, 0, .);
        }
        return  >=  ? -1 : [++];
    }
    public void endPoint(int delta) {
         =  + delta;
    }
    public void rewind() {
        --;
    }

    
reset back to mark and then read back to endPoint to repoint stream back to where we want next consumer of stream to start reading from.
    public void finish() throws IOException {
        .reset();
         = new byte[];
        .read(, 0, );
    }
    public void reset() throws IOException {
        .reset();
    }
New to GrepCode? Check out our FAQ X