www.pudn.com > jnp-src.rar > MarkResetFileInputStream.java


/*
 * Java Network Programming, Second Edition
 * Merlin Hughes, Michael Shoffner, Derek Hamner
 * Manning Publications Company; ISBN 188477749X
 *
 * http://nitric.com/jnp/
 *
 * Copyright (c) 1997-1999 Merlin Hughes, Michael Shoffner, Derek Hamner;
 * all rights reserved; see license.txt for details.
 */

import java.io.*; 
 
public class MarkResetFileInputStream extends FileInputStream { 
  public MarkResetFileInputStream (String filename) throws IOException { 
    this (new RandomAccessFile (filename, "r")); 
  } 
 
  public MarkResetFileInputStream (File file) throws IOException { 
    this (file.getPath ()); 
  } 
 
  protected long markedPosition; 
  protected RandomAccessFile file; 
   
  protected MarkResetFileInputStream (RandomAccessFile file) throws IOException { 
    super (file.getFD ()); 
    this.file = file; 
    markedPosition = -1; 
  } 
 
  public boolean markSupported () { 
    return true; 
  } 
 
  public void mark (int readAheadLimit) { 
    try { 
      markedPosition = file.getFilePointer (); 
    } catch (IOException ex) { 
      markedPosition = -1; 
    } 
  } 
   
  public void reset () throws IOException { 
    if (markedPosition == -1) 
      throw new IOException ("No mark set."); 
    file.seek (markedPosition); 
  } 
}