jimu-decompiled/sources/com/bumptech/glide/load/resource/bitmap/RecyclableBufferedInputStream.java
2025-05-13 19:24:51 +02:00

257 lines
7.8 KiB
Java

package com.bumptech.glide.load.resource.bitmap;
import com.bumptech.glide.load.engine.bitmap_recycle.ArrayPool;
import java.io.FilterInputStream;
import java.io.IOException;
import java.io.InputStream;
/* loaded from: classes.dex */
public class RecyclableBufferedInputStream extends FilterInputStream {
private volatile byte[] a;
private int b;
private int c;
private int d;
private int e;
private final ArrayPool f;
static class InvalidMarkException extends IOException {
InvalidMarkException(String str) {
super(str);
}
}
public RecyclableBufferedInputStream(InputStream inputStream, ArrayPool arrayPool) {
this(inputStream, arrayPool, 65536);
}
private static IOException c() throws IOException {
throw new IOException("BufferedInputStream is closed");
}
public synchronized void a() {
this.c = this.a.length;
}
@Override // java.io.FilterInputStream, java.io.InputStream
public synchronized int available() throws IOException {
InputStream inputStream;
inputStream = ((FilterInputStream) this).in;
if (this.a == null || inputStream == null) {
c();
throw null;
}
return (this.b - this.e) + inputStream.available();
}
public synchronized void b() {
if (this.a != null) {
this.f.put(this.a);
this.a = null;
}
}
@Override // java.io.FilterInputStream, java.io.InputStream, java.io.Closeable, java.lang.AutoCloseable
public void close() throws IOException {
if (this.a != null) {
this.f.put(this.a);
this.a = null;
}
InputStream inputStream = ((FilterInputStream) this).in;
((FilterInputStream) this).in = null;
if (inputStream != null) {
inputStream.close();
}
}
@Override // java.io.FilterInputStream, java.io.InputStream
public synchronized void mark(int i) {
this.c = Math.max(this.c, i);
this.d = this.e;
}
@Override // java.io.FilterInputStream, java.io.InputStream
public boolean markSupported() {
return true;
}
@Override // java.io.FilterInputStream, java.io.InputStream
public synchronized int read() throws IOException {
byte[] bArr = this.a;
InputStream inputStream = ((FilterInputStream) this).in;
if (bArr == null || inputStream == null) {
c();
throw null;
}
if (this.e >= this.b && a(inputStream, bArr) == -1) {
return -1;
}
if (bArr != this.a && (bArr = this.a) == null) {
c();
throw null;
}
if (this.b - this.e <= 0) {
return -1;
}
int i = this.e;
this.e = i + 1;
return bArr[i] & 255;
}
@Override // java.io.FilterInputStream, java.io.InputStream
public synchronized void reset() throws IOException {
if (this.a == null) {
throw new IOException("Stream is closed");
}
if (-1 == this.d) {
throw new InvalidMarkException("Mark has been invalidated, pos: " + this.e + " markLimit: " + this.c);
}
this.e = this.d;
}
@Override // java.io.FilterInputStream, java.io.InputStream
public synchronized long skip(long j) throws IOException {
if (j < 1) {
return 0L;
}
byte[] bArr = this.a;
if (bArr == null) {
c();
throw null;
}
InputStream inputStream = ((FilterInputStream) this).in;
if (inputStream == null) {
c();
throw null;
}
if (this.b - this.e >= j) {
this.e = (int) (this.e + j);
return j;
}
long j2 = this.b - this.e;
this.e = this.b;
if (this.d == -1 || j > this.c) {
return j2 + inputStream.skip(j - j2);
}
if (a(inputStream, bArr) == -1) {
return j2;
}
if (this.b - this.e >= j - j2) {
this.e = (int) ((this.e + j) - j2);
return j;
}
long j3 = (j2 + this.b) - this.e;
this.e = this.b;
return j3;
}
RecyclableBufferedInputStream(InputStream inputStream, ArrayPool arrayPool, int i) {
super(inputStream);
this.d = -1;
this.f = arrayPool;
this.a = (byte[]) arrayPool.b(i, byte[].class);
}
private int a(InputStream inputStream, byte[] bArr) throws IOException {
int i = this.d;
if (i != -1) {
int i2 = this.e - i;
int i3 = this.c;
if (i2 < i3) {
if (i == 0 && i3 > bArr.length && this.b == bArr.length) {
int length = bArr.length * 2;
if (length > i3) {
length = i3;
}
byte[] bArr2 = (byte[]) this.f.b(length, byte[].class);
System.arraycopy(bArr, 0, bArr2, 0, bArr.length);
this.a = bArr2;
this.f.put(bArr);
bArr = bArr2;
} else {
int i4 = this.d;
if (i4 > 0) {
System.arraycopy(bArr, i4, bArr, 0, bArr.length - i4);
}
}
this.e -= this.d;
this.d = 0;
this.b = 0;
int i5 = this.e;
int read = inputStream.read(bArr, i5, bArr.length - i5);
int i6 = this.e;
if (read > 0) {
i6 += read;
}
this.b = i6;
return read;
}
}
int read2 = inputStream.read(bArr);
if (read2 > 0) {
this.d = -1;
this.e = 0;
this.b = read2;
}
return read2;
}
@Override // java.io.FilterInputStream, java.io.InputStream
public synchronized int read(byte[] bArr, int i, int i2) throws IOException {
int i3;
int i4;
byte[] bArr2 = this.a;
if (bArr2 == null) {
c();
throw null;
}
if (i2 == 0) {
return 0;
}
InputStream inputStream = ((FilterInputStream) this).in;
if (inputStream != null) {
if (this.e < this.b) {
int i5 = this.b - this.e >= i2 ? i2 : this.b - this.e;
System.arraycopy(bArr2, this.e, bArr, i, i5);
this.e += i5;
if (i5 == i2 || inputStream.available() == 0) {
return i5;
}
i += i5;
i3 = i2 - i5;
} else {
i3 = i2;
}
while (true) {
if (this.d == -1 && i3 >= bArr2.length) {
i4 = inputStream.read(bArr, i, i3);
if (i4 == -1) {
return i3 != i2 ? i2 - i3 : -1;
}
} else {
if (a(inputStream, bArr2) == -1) {
return i3 != i2 ? i2 - i3 : -1;
}
if (bArr2 != this.a && (bArr2 = this.a) == null) {
c();
throw null;
}
i4 = this.b - this.e >= i3 ? i3 : this.b - this.e;
System.arraycopy(bArr2, this.e, bArr, i, i4);
this.e += i4;
}
i3 -= i4;
if (i3 == 0) {
return i2;
}
if (inputStream.available() == 0) {
return i2 - i3;
}
i += i4;
}
} else {
c();
throw null;
}
}
}