001    package edu.rice.cs.cunit.util;
002    
003    import java.io.DataInputStream;
004    
005    /** A DataInputStream that makes the position in the stream available. */
006    public final class PositionDataInputStream extends DataInputStream implements ProvidesInputStreamPosition {
007        /** Delegee. */
008        protected PositionInputStream _in;
009        
010        /** Create a new PositionInputStream based on the stream given.
011          * @param in input stream */
012        public PositionDataInputStream(PositionInputStream in) {
013            super(in);
014            _in = in;
015        }
016        
017        /**
018         * <p>Get the stream position.</p>
019         *
020         * <p>Eventually, the position will roll over to a negative number.
021         * Reading 1 Tb per second, this would occur after approximately three 
022         * months. Applications should account for this possibility in their 
023         * design.</p>
024         *
025         * @return the current stream position.
026         */
027        public synchronized long getPosition() {
028            return _in.getPosition();
029        }
030    }