1 /* 2 * SeekableFileInputStream 3 * 4 * Author: Lasse Collin <lasse.collin@tukaani.org> 5 * 6 * This file has been put into the public domain. 7 * You can do whatever you want with this file. 8 */ 9 10 package org.tukaani.xz; 11 12 import java.io.File; 13 import java.io.RandomAccessFile; 14 import java.io.IOException; 15 import java.io.FileNotFoundException; 16 17 /** 18 * Wraps a {@link java.io.RandomAccessFile RandomAccessFile} 19 * in a SeekableInputStream. 20 */ 21 public class SeekableFileInputStream extends SeekableInputStream { 22 /** 23 * The RandomAccessFile that has been wrapped 24 * into a SeekableFileInputStream. 25 */ 26 protected RandomAccessFile randomAccessFile; 27 28 /** 29 * Creates a new seekable input stream that reads from the specified file. 30 */ SeekableFileInputStream(File file)31 public SeekableFileInputStream(File file) throws FileNotFoundException { 32 randomAccessFile = new RandomAccessFile(file, "r"); 33 } 34 35 /** 36 * Creates a new seekable input stream that reads from a file with 37 * the specified name. 38 */ SeekableFileInputStream(String name)39 public SeekableFileInputStream(String name) throws FileNotFoundException { 40 randomAccessFile = new RandomAccessFile(name, "r"); 41 } 42 43 /** 44 * Creates a new seekable input stream from an existing 45 * <code>RandomAccessFile</code> object. 46 */ SeekableFileInputStream(RandomAccessFile randomAccessFile)47 public SeekableFileInputStream(RandomAccessFile randomAccessFile) { 48 this.randomAccessFile = randomAccessFile; 49 } 50 51 /** 52 * Calls {@link RandomAccessFile#read() randomAccessFile.read()}. 53 */ read()54 public int read() throws IOException { 55 return randomAccessFile.read(); 56 } 57 58 /** 59 * Calls {@link RandomAccessFile#read(byte[]) randomAccessFile.read(buf)}. 60 */ read(byte[] buf)61 public int read(byte[] buf) throws IOException { 62 return randomAccessFile.read(buf); 63 } 64 65 /** 66 * Calls 67 * {@link RandomAccessFile#read(byte[],int,int) 68 * randomAccessFile.read(buf, off, len)}. 69 */ read(byte[] buf, int off, int len)70 public int read(byte[] buf, int off, int len) throws IOException { 71 return randomAccessFile.read(buf, off, len); 72 } 73 74 /** 75 * Calls {@link RandomAccessFile#close() randomAccessFile.close()}. 76 */ close()77 public void close() throws IOException { 78 randomAccessFile.close(); 79 } 80 81 /** 82 * Calls {@link RandomAccessFile#length() randomAccessFile.length()}. 83 */ length()84 public long length() throws IOException { 85 return randomAccessFile.length(); 86 } 87 88 /** 89 * Calls {@link RandomAccessFile#getFilePointer() 90 randomAccessFile.getFilePointer()}. 91 */ position()92 public long position() throws IOException { 93 return randomAccessFile.getFilePointer(); 94 } 95 96 /** 97 * Calls {@link RandomAccessFile#seek(long) randomAccessFile.seek(long)}. 98 */ seek(long pos)99 public void seek(long pos) throws IOException { 100 randomAccessFile.seek(pos); 101 } 102 } 103