153 lines
5.1 KiB
Java
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");
|
|
}
|
|
}
|