lucene-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From gol...@apache.org
Subject cvs commit: jakarta-lucene/src/java/org/apache/lucene/index CompoundFileReader.java
Date Thu, 20 Nov 2003 19:01:44 GMT
goller      2003/11/20 11:01:44

  Modified:    src/java/org/apache/lucene/index CompoundFileReader.java
  Log:
  avoid double buffering in CSInputStream
  
  Revision  Changes    Path
  1.3       +13 -36    jakarta-lucene/src/java/org/apache/lucene/index/CompoundFileReader.java
  
  Index: CompoundFileReader.java
  ===================================================================
  RCS file: /home/cvs/jakarta-lucene/src/java/org/apache/lucene/index/CompoundFileReader.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- CompoundFileReader.java	13 Oct 2003 14:18:04 -0000	1.2
  +++ CompoundFileReader.java	20 Nov 2003 19:01:44 -0000	1.3
  @@ -235,15 +235,12 @@
           InputStream base;
           long fileOffset;
   
  -        CSInputStream(final InputStream base,
  -                      final long fileOffset,
  -                      final long length)
  -        throws IOException
  +        CSInputStream(final InputStream base, final long fileOffset, final long length)
  +          throws IOException
           {
  -            this.base = (InputStream) base.clone();
  +            this.base = base;
               this.fileOffset = fileOffset;
               this.length = length;   // variable in the superclass
  -            seekInternal(0);        // position to the adjusted 0th byte
           }
   
           /** Expert: implements buffer refill.  Reads bytes from the current
  @@ -255,43 +252,23 @@
           protected void readInternal(byte[] b, int offset, int len)
           throws IOException
           {
  -            base.readBytes(b, offset, len);
  +            synchronized (base) {
  +              long start = getFilePointer();
  +              if(start + len > length)
  +                throw new IOException("read past EOF");
  +              base.seek(fileOffset + start);
  +              base.readBytes(b, offset, len);
  +            }
           }
   
           /** Expert: implements seek.  Sets current position in this file, where
            *  the next {@link #readInternal(byte[],int,int)} will occur.
            * @see #readInternal(byte[],int,int)
            */
  -        protected void seekInternal(long pos) throws IOException
  -        {
  -            if (pos > 0 && pos >= length)
  -                throw new IOException("Seek past the end of file");
  -
  -            if (pos < 0)
  -                throw new IOException("Seek to a negative offset");
  -
  -            base.seek(fileOffset + pos);
  -        }
  +        protected void seekInternal(long pos) throws IOException {}
   
           /** Closes the stream to futher operations. */
  -        public void close() throws IOException
  -        {
  -            base.close();
  -        }
  +        public void close() throws IOException {}
   
  -        /** Returns a clone of this stream.
  -         *
  -         * <p>Clones of a stream access the same data, and are positioned at the
same
  -         * point as the stream they were cloned from.
  -         *
  -         * <p>Expert: Subclasses must ensure that clones may be positioned at
  -         * different points in the input from each other and from the stream they
  -         * were cloned from.
  -         */
  -        public Object clone() {
  -            CSInputStream other = (CSInputStream) super.clone();
  -            other.base = (InputStream) base.clone();
  -            return other;
  -        }
       }
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: lucene-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: lucene-dev-help@jakarta.apache.org


Mime
View raw message