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