내 안드로이드 응용 프로그램에서 네트워킹을 위해 OKHTTP 클라이언트를 사용하고 있습니다.
이 예제는 바이너리 파일을 업로드하는 방법을 보여줍니다. OKHTTP 클라이언트로 다운로드하는 바이너리 파일의 inputstream을 얻는 방법을 알고 싶습니다.
다음은 예제 목록입니다.
public class InputStreamRequestBody extends RequestBody {
private InputStream inputStream;
private MediaType mediaType;
public static RequestBody create(final MediaType mediaType,
final InputStream inputStream) {
return new InputStreamRequestBody(inputStream, mediaType);
}
private InputStreamRequestBody(InputStream inputStream, MediaType mediaType) {
this.inputStream = inputStream;
this.mediaType = mediaType;
}
@Override
public MediaType contentType() {
return mediaType;
}
@Override
public long contentLength() {
try {
return inputStream.available();
} catch (IOException e) {
return 0;
}
}
@Override
public void writeTo(BufferedSink sink) throws IOException {
Source source = null;
try {
source = Okio.source(inputStream);
sink.writeAll(source);
} finally {
Util.closeQuietly(source);
}
}
}
간단한 get 요청의 현재 코드는 다음과 같습니다.
OkHttpClient client = new OkHttpClient();
request = new Request.Builder().url("URL string here")
.addHeader("X-CSRFToken", csrftoken)
.addHeader("Content-Type", "application/json")
.build();
response = getClient().newCall(request).execute();
이제 응답을 InputStream
. 응답을 Apache HTTP Client
위해 OkHttp
다음 과 같은 응답과 유사한 것 :
InputStream is = response.getEntity().getContent();
편집하다
아래에서 답변을 수락했습니다. 내 수정 된 코드 :
request = new Request.Builder().url(urlString).build();
response = getClient().newCall(request).execute();
InputStream is = response.body().byteStream();
BufferedInputStream input = new BufferedInputStream(is);
OutputStream output = new FileOutputStream(file);
byte[] data = new byte[1024];
long total = 0;
while ((count = input.read(data)) != -1) {
total += count;
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();