1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 package org.apache.http.client.fluent;
29
30 import java.io.IOException;
31 import java.io.InputStream;
32 import java.io.OutputStream;
33
34 import org.apache.http.entity.AbstractHttpEntity;
35 import org.apache.http.entity.ContentType;
36 import org.apache.http.util.Args;
37
38 class InternalInputStreamEntity extends AbstractHttpEntity {
39
40 private final InputStream content;
41 private final long length;
42
43 public InternalInputStreamEntity(final InputStream inputStream, final long length, final ContentType contentType) {
44 super();
45 this.content = Args.notNull(inputStream, "Source input stream");
46 this.length = length;
47 if (contentType != null) {
48 setContentType(contentType.toString());
49 }
50 }
51
52 @Override
53 public boolean isRepeatable() {
54 return false;
55 }
56
57 @Override
58 public long getContentLength() {
59 return this.length;
60 }
61
62 @Override
63 public InputStream getContent() throws IOException {
64 return this.content;
65 }
66
67 @Override
68 public void writeTo(final OutputStream outStream) throws IOException {
69 Args.notNull(outStream, "Output stream");
70 final InputStream inStream = this.content;
71 try {
72 final byte[] buffer = new byte[4096];
73 int readLen;
74 if (this.length < 0) {
75
76 while ((readLen = inStream.read(buffer)) != -1) {
77 outStream.write(buffer, 0, readLen);
78 }
79 } else {
80
81 long remaining = this.length;
82 while (remaining > 0) {
83 readLen = inStream.read(buffer, 0, (int)Math.min(4096, remaining));
84 if (readLen == -1) {
85 break;
86 }
87 outStream.write(buffer, 0, readLen);
88 remaining -= readLen;
89 }
90 }
91 } finally {
92 inStream.close();
93 }
94 }
95
96 @Override
97 public boolean isStreaming() {
98 return true;
99 }
100
101 }