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 + -
显示快捷键?