minecraft_25w45a_unobfuscated/net/minecraft/util/FastBufferedInputStream.java
2025-11-24 22:52:51 +03:00

98 lines
2.5 KiB
Java

/*
* Decompiled with CFR 0.152.
*/
package net.minecraft.util;
import java.io.IOException;
import java.io.InputStream;
public class FastBufferedInputStream
extends InputStream {
private static final int DEFAULT_BUFFER_SIZE = 8192;
private final InputStream in;
private final byte[] buffer;
private int limit;
private int position;
public FastBufferedInputStream(InputStream in) {
this(in, 8192);
}
public FastBufferedInputStream(InputStream in, int bufferSize) {
this.in = in;
this.buffer = new byte[bufferSize];
}
@Override
public int read() throws IOException {
if (this.position >= this.limit) {
this.fill();
if (this.position >= this.limit) {
return -1;
}
}
return Byte.toUnsignedInt(this.buffer[this.position++]);
}
@Override
public int read(byte[] output, int offset, int length) throws IOException {
int availableInBuffer = this.bytesInBuffer();
if (availableInBuffer <= 0) {
if (length >= this.buffer.length) {
return this.in.read(output, offset, length);
}
this.fill();
availableInBuffer = this.bytesInBuffer();
if (availableInBuffer <= 0) {
return -1;
}
}
if (length > availableInBuffer) {
length = availableInBuffer;
}
System.arraycopy(this.buffer, this.position, output, offset, length);
this.position += length;
return length;
}
@Override
public long skip(long count) throws IOException {
if (count <= 0L) {
return 0L;
}
long availableInBuffer = this.bytesInBuffer();
if (availableInBuffer <= 0L) {
return this.in.skip(count);
}
if (count > availableInBuffer) {
count = availableInBuffer;
}
this.position = (int)((long)this.position + count);
return count;
}
@Override
public int available() throws IOException {
return this.bytesInBuffer() + this.in.available();
}
@Override
public void close() throws IOException {
this.in.close();
}
private int bytesInBuffer() {
return this.limit - this.position;
}
private void fill() throws IOException {
this.limit = 0;
this.position = 0;
int actuallyRead = this.in.read(this.buffer, 0, this.buffer.length);
if (actuallyRead > 0) {
this.limit = actuallyRead;
}
}
}