/* Copyright (C) 1998, 1999 Cygnus Solutions This file is part of libgcj. This software is copyrighted work licensed under the terms of the Libgcj License. Please consult the file "LIBGCJ_LICENSE" for details. */ package java.io; /** * @author Warren Levy * @date October 28, 1998. */ /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3 * "The Java Language Specification", ISBN 0-201-63451-1 * plus online API docs for JDK 1.2 beta from http://www.javasoft.com. * Status: Believed complete and correct. */ public class FileInputStream extends InputStream { /* Contains the file descriptor for referencing the actual file. */ private FileDescriptor fd; public FileInputStream(String name) throws FileNotFoundException, IOException { SecurityManager s = System.getSecurityManager(); if (s != null) s.checkRead(name); fd = new FileDescriptor(name, FileDescriptor.READ); } public FileInputStream(File file) throws FileNotFoundException, IOException { this(file.getPath()); } public FileInputStream(FileDescriptor fdObj) { SecurityManager s = System.getSecurityManager(); if (s != null) s.checkRead(fdObj); fd = fdObj; } public int available() throws IOException { return fd.available(); } public void close() throws IOException { if (fd == null) return; fd.close(); fd = null; } protected void finalize() throws IOException { if (fd != null) fd.finalize(); } public final FileDescriptor getFD() throws IOException { if (!fd.valid()) throw new IOException(); return fd; } public int read() throws IOException { return fd.read(); } public int read(byte[] b) throws IOException { return fd.read(b, 0, b.length); } public int read(byte[] b, int off, int len) throws IOException { if (off < 0 || len < 0 || off + len > b.length) throw new ArrayIndexOutOfBoundsException(); return fd.read(b, off, len); } public long skip(long n) throws IOException { return fd.seek(n, FileDescriptor.CUR); } }