jimu-decompiled/sources/okhttp3/ResponseBody.java
2025-05-13 19:24:51 +02:00

153 lines
5.1 KiB
Java

package okhttp3;
import java.io.Closeable;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.nio.charset.Charset;
import okhttp3.internal.Util;
import okio.Buffer;
import okio.BufferedSource;
import okio.ByteString;
/* loaded from: classes2.dex */
public abstract class ResponseBody implements Closeable {
private Reader reader;
static final class BomAwareReader extends Reader {
private final Charset charset;
private boolean closed;
private Reader delegate;
private final BufferedSource source;
BomAwareReader(BufferedSource bufferedSource, Charset charset) {
this.source = bufferedSource;
this.charset = charset;
}
@Override // java.io.Reader, java.io.Closeable, java.lang.AutoCloseable
public void close() throws IOException {
this.closed = true;
Reader reader = this.delegate;
if (reader != null) {
reader.close();
} else {
this.source.close();
}
}
@Override // java.io.Reader
public int read(char[] cArr, int i, int i2) throws IOException {
if (this.closed) {
throw new IOException("Stream closed");
}
Reader reader = this.delegate;
if (reader == null) {
InputStreamReader inputStreamReader = new InputStreamReader(this.source.inputStream(), Util.bomAwareCharset(this.source, this.charset));
this.delegate = inputStreamReader;
reader = inputStreamReader;
}
return reader.read(cArr, i, i2);
}
}
private Charset charset() {
MediaType contentType = contentType();
return contentType != null ? contentType.charset(Util.UTF_8) : Util.UTF_8;
}
public static ResponseBody create(MediaType mediaType, String str) {
Charset charset = Util.UTF_8;
if (mediaType != null && (charset = mediaType.charset()) == null) {
charset = Util.UTF_8;
mediaType = MediaType.parse(mediaType + "; charset=utf-8");
}
Buffer writeString = new Buffer().writeString(str, charset);
return create(mediaType, writeString.size(), writeString);
}
public final InputStream byteStream() {
return source().inputStream();
}
public final byte[] bytes() throws IOException {
long contentLength = contentLength();
if (contentLength > 2147483647L) {
throw new IOException("Cannot buffer entire body for content length: " + contentLength);
}
BufferedSource source = source();
try {
byte[] readByteArray = source.readByteArray();
Util.closeQuietly(source);
if (contentLength == -1 || contentLength == readByteArray.length) {
return readByteArray;
}
throw new IOException("Content-Length (" + contentLength + ") and stream length (" + readByteArray.length + ") disagree");
} catch (Throwable th) {
Util.closeQuietly(source);
throw th;
}
}
public final Reader charStream() {
Reader reader = this.reader;
if (reader != null) {
return reader;
}
BomAwareReader bomAwareReader = new BomAwareReader(source(), charset());
this.reader = bomAwareReader;
return bomAwareReader;
}
@Override // java.io.Closeable, java.lang.AutoCloseable
public void close() {
Util.closeQuietly(source());
}
public abstract long contentLength();
public abstract MediaType contentType();
public abstract BufferedSource source();
public final String string() throws IOException {
BufferedSource source = source();
try {
return source.readString(Util.bomAwareCharset(source, charset()));
} finally {
Util.closeQuietly(source);
}
}
public static ResponseBody create(MediaType mediaType, byte[] bArr) {
return create(mediaType, bArr.length, new Buffer().write(bArr));
}
public static ResponseBody create(MediaType mediaType, ByteString byteString) {
return create(mediaType, byteString.size(), new Buffer().write(byteString));
}
public static ResponseBody create(final MediaType mediaType, final long j, final BufferedSource bufferedSource) {
if (bufferedSource != null) {
return new ResponseBody() { // from class: okhttp3.ResponseBody.1
@Override // okhttp3.ResponseBody
public long contentLength() {
return j;
}
@Override // okhttp3.ResponseBody
public MediaType contentType() {
return MediaType.this;
}
@Override // okhttp3.ResponseBody
public BufferedSource source() {
return bufferedSource;
}
};
}
throw new NullPointerException("source == null");
}
}