bufferedinputstream.java

来自「Sony Ericsson手机上的Facebook客户端全套代码」· Java 代码 · 共 130 行

JAVA
130
字号
// Decompiled by Jad v1.5.7g. Copyright 2000 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/SiliconValley/Bridge/8617/jad.html
// Decompiler options: packimports(3) 
// Source File Name:   BufferedInputStream.java

package se.southend.drops.resource;

import java.io.*;

public class BufferedInputStream extends InputStream
{

    public BufferedInputStream(InputStream in)
    {
        this(in, 0, 2048);
    }

    public BufferedInputStream(InputStream in, int readBufferSize)
    {
        this(in, readBufferSize, 0);
    }

    public BufferedInputStream(InputStream in, int readBufferSize, int windowSize)
    {
        this.in = in;
        setReadBufferSize(readBufferSize);
        setWindowSize(windowSize);
        buffer = new byte[length];
    }

    public void setWindowSize(int windowSize)
    {
        this.windowSize = windowSize;
        length = windowSize + readBufferSize;
    }

    public void setReadBufferSize(int readBufferSize)
    {
        this.readBufferSize = readBufferSize;
        length = windowSize + readBufferSize;
    }

    public synchronized void fill()
        throws IOException
    {
        do
            buffer();
        while(bufptr != readptr);
    }

    public synchronized void buffer()
        throws IOException
    {
        int lastTotal = totalRead;
        if(bufptr >= readptr)
        {
            if(bufptr < length)
            {
                int len = in.read(buffer, bufptr, length - bufptr);
                if(len == -1)
                {
                    done = true;
                    return;
                }
                bufptr += len;
                totalRead += len;
            }
            if(bufptr == length)
                bufptr = 0;
        } else
        if(bufptr < readptr)
        {
            int len = in.read(buffer, bufptr, readptr - bufptr);
            if(len == -1)
            {
                done = true;
                return;
            }
            bufptr += len;
            totalRead += len;
        }
        System.out.println("Buffering complete: " + (totalRead - lastTotal) + " buffered.   Total: " + totalRead);
    }

    public synchronized int read()
        throws IOException
    {
        if(done && bufptr == readptr)
            return -1;
        if(!done && available() <= windowSize)
            buffer();
        int lastptr = readptr;
        if(++readptr == length)
            readptr = 0;
        return buffer[lastptr] & 0xff;
    }

    public synchronized int available()
    {
        return bufptr < readptr ? (bufptr + length) - readptr : bufptr - readptr;
    }

    public synchronized int read(byte b[], int off, int len)
        throws IOException
    {
        totalRequested += len;
        System.out.println("Requested " + len + " bytes.  Total: " + totalRequested);
        return super.read(b, off, len);
    }

    public void close()
        throws IOException
    {
        in.close();
    }

    private static final int DEFAULT_WINDOW_SIZE = 0;
    private static final int DEFAULT_READ_BUFFER_SIZE = 2048;
    private InputStream in;
    private int windowSize;
    private int readBufferSize;
    private int length;
    private byte buffer[];
    private int readptr;
    private int bufptr;
    private int totalRead;
    private boolean done;
    private int totalRequested;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?