📄 mybufferedinputstream.java
字号:
/* * Java Network Programming, Second Edition * Merlin Hughes, Michael Shoffner, Derek Hamner * Manning Publications Company; ISBN 188477749X * * http://nitric.com/jnp/ * * Copyright (c) 1997-1999 Merlin Hughes, Michael Shoffner, Derek Hamner; * all rights reserved; see license.txt for details. */import java.io.*;
public class MyBufferedInputStream extends FilterInputStream {
public MyBufferedInputStream (InputStream in) {
this (in, 512);
}
protected byte[] buffer;
protected int bufferSize, bufferIndex, bufferCapacity;
public MyBufferedInputStream (InputStream in, int bufferCapacity) {
super (in);
this.bufferCapacity = bufferCapacity;
buffer = new byte[bufferCapacity];
}
public synchronized int available () throws IOException {
return (bufferSize < 0) ? 0 :
(bufferIndex < bufferSize) ? bufferSize - bufferIndex : in.available ();
}
public synchronized int read () throws IOException {
if (bufferIndex >= bufferSize) {
if (bufferSize < 0)
return -1;
fillBuffer ();
if (bufferSize < 0)
return -1;
}
return buffer[bufferIndex ++] & 0xff;
}
protected void fillBuffer () throws IOException {
bufferIndex = 0;
bufferSize = in.read (buffer, 0, bufferCapacity);
}
public synchronized int read (byte[] data, int offset, int length) throws IOException {
int amount;
if (length <= 0) {
amount = 0;
} else if (bufferIndex < bufferSize) {
amount = Math.min (length, bufferSize - bufferIndex);
System.arraycopy (buffer, bufferIndex, data, offset, amount);
bufferIndex += amount;
} else {
if (bufferSize < 0)
return -1;
if (length < bufferCapacity) {
fillBuffer ();
amount = read (data, offset, length);
} else {
amount = in.read (data, offset, length);
if (amount < 0)
bufferSize = -1;
}
}
return amount;
}
public synchronized long skip (long amount) throws IOException {
if ((amount <= 0) || (bufferSize < 0)) {
return 0;
} else if (bufferIndex < bufferSize) {
int skip = (int) Math.min (amount, bufferSize - bufferIndex);
bufferIndex += skip;
return skip;
} else {
return in.skip (amount);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -