Permalink
Browse files

[JBVFS-157]; add lazy input stream.

  • Loading branch information...
1 parent 1d292e4 commit 7b9ddd6c0bfff941305cbc49d05e4abc46fc2aeb @alesj alesj committed May 9, 2010
@@ -22,9 +22,10 @@
package org.jboss.vfs;
import java.io.InputStream;
-import java.io.IOException;
-import java.io.Reader;
import java.io.InputStreamReader;
+import java.io.Reader;
+
+import org.jboss.vfs.util.LazyInputStream;
import org.xml.sax.InputSource;
@@ -54,11 +55,7 @@ public String getSystemId() {
@Override
public InputStream getByteStream() {
- try {
- return file.openStream();
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
+ return new LazyInputStream(file);
}
@Override
@@ -0,0 +1,130 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.vfs.util;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.jboss.vfs.VirtualFile;
+
+/**
+ * Lazy input stream.
+ *
+ * Delaying opening stream from underlying virtual file as long as possible.
+ * Won't be opened if not used at all.
+ *
+ * @author <a href="mailto:ales.justin@jboss.org">Ales Justin</a>
+ */
+public class LazyInputStream extends InputStream
+{
+ private VirtualFile file;
+ private InputStream stream;
+
+ public LazyInputStream(VirtualFile file)
+ {
+ if (file == null)
+ throw new IllegalArgumentException("Null file");
+ this.file = file;
+ }
+
+ /**
+ * Open stream.
+ *
+ * @return file's stream
+ * @throws IOException for any IO error
+ */
+ protected synchronized InputStream openStream() throws IOException
+ {
+ if (stream == null)
+ stream = file.openStream();
+ return stream;
+ }
+
+ @Override
+ public int read() throws IOException
+ {
+ return openStream().read();
+ }
+
+ @Override
+ public int read(byte[] b) throws IOException
+ {
+ return openStream().read(b);
+ }
+
+ @Override
+ public int read(byte[] b, int off, int len) throws IOException
+ {
+ return openStream().read(b, off, len);
+ }
+
+ @Override
+ public long skip(long n) throws IOException
+ {
+ return openStream().skip(n);
+ }
+
+ @Override
+ public int available() throws IOException
+ {
+ return openStream().available();
+ }
+
+ @Override
+ public void close() throws IOException
+ {
+ openStream().close();
+ }
+
+ @Override
+ public void mark(int readlimit)
+ {
+ try
+ {
+ openStream().mark(readlimit);
+ }
+ catch (IOException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public void reset() throws IOException
+ {
+ openStream().reset();
+ }
+
+ @Override
+ public boolean markSupported()
+ {
+ try
+ {
+ return openStream().markSupported();
+ }
+ catch (IOException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+}

0 comments on commit 7b9ddd6

Please sign in to comment.