home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &n…he Search for Life DVD 2 / DVD-ROM.iso / install / jre1_3 / lib / rt.jar / sun / net / www / http / ChunkedInputStream.class (.txt) next >
Encoding:
Java Class File  |  1979-12-31  |  3.3 KB  |  217 lines

  1. package sun.net.www.http;
  2.  
  3. import java.io.EOFException;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.io.PushbackInputStream;
  7. import java.util.Vector;
  8.  
  9. public class ChunkedInputStream extends InputStream {
  10.    private byte[] buf;
  11.    private byte[][] bufs;
  12.    private int bufIndex = 0;
  13.    private int count;
  14.    private int pos;
  15.    // $FF: renamed from: in java.io.InputStream
  16.    private InputStream field_0;
  17.    private char[] lineBuffer;
  18.  
  19.    public void print() {
  20.       System.out.println("pos is " + this.pos);
  21.       System.out.println("count is " + this.count);
  22.       System.out.println("bufIndex is " + this.bufIndex);
  23.       System.out.println("bufs.length is " + this.bufs.length);
  24.  
  25.       for(int var1 = 0; var1 < this.bufs.length; ++var1) {
  26.          System.out.println("bufs " + var1 + " is len " + this.bufs[var1].length);
  27.       }
  28.  
  29.    }
  30.  
  31.    private void ensureOpen() throws IOException {
  32.       if (this.field_0 == null) {
  33.          throw new IOException("Stream closed");
  34.       }
  35.    }
  36.  
  37.    public ChunkedInputStream(InputStream var1) throws IOException {
  38.       this.field_0 = var1;
  39.       this.prefill();
  40.    }
  41.  
  42.    private void readFully(byte[] var1, int var2, int var3) throws IOException {
  43.       InputStream var4 = this.field_0;
  44.  
  45.       int var6;
  46.       for(int var5 = 0; var5 < var3; var5 += var6) {
  47.          var6 = var4.read(var1, var2 + var5, var3 - var5);
  48.          if (var6 < 0) {
  49.             throw new EOFException();
  50.          }
  51.       }
  52.  
  53.    }
  54.  
  55.    private String readLine() throws IOException {
  56.       InputStream var1 = this.field_0;
  57.       char[] var2 = this.lineBuffer;
  58.       if (var2 == null) {
  59.          var2 = this.lineBuffer = new char[128];
  60.       }
  61.  
  62.       int var3 = var2.length;
  63.       int var4 = 0;
  64.  
  65.       while(true) {
  66.          int var5;
  67.          switch (var5 = var1.read()) {
  68.             case 13:
  69.                int var6 = var1.read();
  70.                if (var6 != 10 && var6 != -1) {
  71.                   if (!(var1 instanceof PushbackInputStream)) {
  72.                      var1 = this.field_0 = new PushbackInputStream(var1);
  73.                   }
  74.  
  75.                   ((PushbackInputStream)var1).unread(var6);
  76.                }
  77.             case -1:
  78.             case 10:
  79.                if (var5 == -1 && var4 == 0) {
  80.                   return null;
  81.                }
  82.  
  83.                return String.copyValueOf(var2, 0, var4);
  84.          }
  85.  
  86.          --var3;
  87.          if (var3 < 0) {
  88.             var2 = new char[var4 + 128];
  89.             var3 = var2.length - var4 - 1;
  90.             System.arraycopy(this.lineBuffer, 0, var2, 0, var4);
  91.             this.lineBuffer = var2;
  92.          }
  93.  
  94.          var2[var4++] = (char)var5;
  95.       }
  96.    }
  97.  
  98.    private int readChunkSize() throws IOException {
  99.       int var1 = -1;
  100.  
  101.       try {
  102.          String var2 = this.readLine();
  103.  
  104.          int var3;
  105.          for(var3 = 0; var3 < var2.length(); ++var3) {
  106.             char var4 = var2.charAt(var3);
  107.             if (Character.digit(var4, 16) == -1) {
  108.                break;
  109.             }
  110.          }
  111.  
  112.          var1 = Integer.parseInt(var2.substring(0, var3), 16);
  113.          return var1;
  114.       } catch (NumberFormatException var5) {
  115.          throw new IOException("Bogus chunk size");
  116.       }
  117.    }
  118.  
  119.    private void prefill() throws IOException {
  120.       Vector var1 = new Vector();
  121.  
  122.       while(true) {
  123.          int var3 = this.readChunkSize();
  124.          if (var3 == 0) {
  125.             this.bufs = new byte[var1.size()][];
  126.             var1.copyInto(this.bufs);
  127.             return;
  128.          }
  129.  
  130.          byte[] var2 = new byte[var3];
  131.          this.readFully(var2, 0, var3);
  132.          this.readCRLF();
  133.          var1.addElement(var2);
  134.       }
  135.    }
  136.  
  137.    private void readCRLF() throws IOException {
  138.       int var1 = this.field_0.read();
  139.       if (var1 != 13) {
  140.          throw new IOException("missing CRLF");
  141.       } else {
  142.          var1 = this.field_0.read();
  143.          if (var1 != 10) {
  144.             throw new IOException("missing CRLF");
  145.          }
  146.       }
  147.    }
  148.  
  149.    private void fill() throws IOException {
  150.       if (this.bufs.length != 0 && this.bufIndex < this.bufs.length) {
  151.          this.pos = 0;
  152.          this.buf = this.bufs[this.bufIndex];
  153.          this.bufs[this.bufIndex] = null;
  154.          ++this.bufIndex;
  155.          this.count = this.buf.length;
  156.       }
  157.    }
  158.  
  159.    public synchronized int read() throws IOException {
  160.       this.ensureOpen();
  161.       if (this.pos >= this.count) {
  162.          this.fill();
  163.          if (this.pos >= this.count) {
  164.             return -1;
  165.          }
  166.       }
  167.  
  168.       return this.buf[this.pos++] & 255;
  169.    }
  170.  
  171.    private int read1(byte[] var1, int var2, int var3) throws IOException {
  172.       int var4 = this.count - this.pos;
  173.       if (var4 <= 0) {
  174.          this.fill();
  175.          var4 = this.count - this.pos;
  176.          if (var4 <= 0) {
  177.             return -1;
  178.          }
  179.       }
  180.  
  181.       int var5 = var4 < var3 ? var4 : var3;
  182.       System.arraycopy(this.buf, this.pos, var1, var2, var5);
  183.       this.pos += var5;
  184.       return var5;
  185.    }
  186.  
  187.    public synchronized int read(byte[] var1, int var2, int var3) throws IOException {
  188.       this.ensureOpen();
  189.       if (var2 >= 0 && var2 <= var1.length && var3 >= 0 && var2 + var3 <= var1.length && var2 + var3 >= 0) {
  190.          return var3 == 0 ? 0 : this.read1(var1, var2, var3);
  191.       } else {
  192.          throw new IndexOutOfBoundsException();
  193.       }
  194.    }
  195.  
  196.    public synchronized int available() throws IOException {
  197.       int var1 = 0;
  198.       this.ensureOpen();
  199.       var1 = this.count - this.pos;
  200.  
  201.       for(int var2 = this.bufIndex; var2 < this.bufs.length; ++var2) {
  202.          var1 += this.bufs[var2].length;
  203.       }
  204.  
  205.       return var1;
  206.    }
  207.  
  208.    public synchronized void close() throws IOException {
  209.       if (this.field_0 != null) {
  210.          this.field_0.close();
  211.          this.field_0 = null;
  212.          this.buf = null;
  213.          this.bufs = null;
  214.       }
  215.    }
  216. }
  217.