Mega Code Archive

 
Categories / Java / File Input Output
 

This input stream wrapper closes the base input stream when fully read

/*  * Copyright 2004-2011 H2 Group. Multiple-Licensed under the H2 License,  * Version 1.0, and under the Eclipse Public License, Version 1.0  * (http://h2database.com/html/license.html).  * Initial Developer: H2 Group  */ //package org.h2.util; import java.io.IOException; import java.io.InputStream; /**  * This input stream wrapper closes the base input stream when fully read.  */ public class AutoCloseInputStream extends InputStream {     private final InputStream in;     private boolean closed;     /**      * Create a new input stream.      *      * @param in the input stream      */     public AutoCloseInputStream(InputStream in) {         this.in = in;     }     private int autoClose(int x) throws IOException {         if (x < 0) {             close();         }         return x;     }     public void close() throws IOException {         if (!closed) {             in.close();             closed = true;         }     }     public int read(byte[] b, int off, int len) throws IOException {         return closed ? -1 : autoClose(in.read(b, off, len));     }     public int read(byte[] b) throws IOException {         return closed ? -1 : autoClose(in.read(b));     }     public int read() throws IOException {         return closed ? -1 : autoClose(in.read());     } }