Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.merlin.io;
  
  import java.io.*;

An input stream that reads data from an OutputEngine.

Author(s):
Copyright (c) 2002 Merlin Hughes <merlin@merlin.org> org.merlin.io was released by its author under the Apache License, Version 2.0 (the "License") on 9 April 2008; you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
 
 public class OutputEngineInputStream extends InputStream {
   private static final int DEFAULT_INITIAL_BUFFER_SIZE = 8192;
   
   private OutputEngine engine;
   private byte[] buffer;
   private int indexlimitcapacity;
   private boolean closedeof;
   
   public OutputEngineInputStream (OutputEngine enginethrows IOException {
     this (engine);
   }
 
   public OutputEngineInputStream (OutputEngine engineint initialBufferSizethrows IOException {
     this. = engine;
      = initialBufferSize;
      = new byte[];
     engine.initialize (new OutputStreamImpl ());
   }
 
   private byte[] one = new byte[1];
   
   public int read () throws IOException {
     int amount = read (, 0, 1);
     return (amount < 0) ? -1 : [0] & 0xff;
   }
   
   public int read (byte data[], int offsetint lengththrows IOException {
     if (data == null) {
       throw new NullPointerException ();
     } else if ((offset < 0) || (offset + length > data.length) || (length < 0)) {
       throw new IndexOutOfBoundsException ();
     } else if () {
       throw new IOException ("Stream closed");
     } else {
       while ( >= ) {
         if ()
           return -1;
         .execute ();
       }
       if ( -  < length)
         length =  - ;
       System.arraycopy (dataoffsetlength);
        += length;
       return length;
     }
   }
 
   public long skip (long amountthrows IOException {
     if () {
       throw new IOException ("Stream closed");
     } else if (amount <= 0) {
       return 0;
     } else {
       while ( >= ) {
         if ()
           return 0;
         .execute ();
       }
       if ( -  < amount)
         amount =  - ;
        += (intamount;
       return amount;
     }
   }
   
   public int available () throws IOException {
     if () {
       throw new IOException ("Stream closed");
     } else {
       return  - ;
     }
   }
   
   public void close () throws IOException {
     if (!) {
       = true;
      .finish ();
    }
  }
  private void writeImpl (byte[] dataint offsetint length) {
    if ( >= )
       =  = 0;
    if ( + length > ) {
       =  * 2 + length;
      byte[] tmp = new byte[];
      System.arraycopy (tmp, 0,  - );
       = tmp;
       -= ;
       = 0;
    }
    System.arraycopy (dataoffsetlength);
     += length;
  }
  private class OutputStreamImpl extends OutputStream {
    public void write (int datumthrows IOException {
      [0] = (bytedatum;
      write (, 0, 1);
    }
    public void write (byte[] dataint offsetint lengththrows IOException {
      if (data == null) {
        throw new NullPointerException ();
      } else if ((offset < 0) || (offset + length > data.length) || (length < 0)) {
        throw new IndexOutOfBoundsException ();
      } else if () {
        throw new IOException ("Stream closed");
      } else {
        writeImpl (dataoffsetlength);
      }
    }
    public void close () {
       = true;
    }
  }
New to GrepCode? Check out our FAQ X