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.nio.entity;
29
30 import java.io.IOException;
31 import java.io.InputStream;
32 import java.io.OutputStream;
33 import java.nio.ByteBuffer;
34 import java.nio.channels.Channels;
35 import java.nio.channels.ReadableByteChannel;
36
37 import org.apache.http.HttpEntity;
38 import org.apache.http.entity.HttpEntityWrapper;
39 import org.apache.http.nio.ContentEncoder;
40 import org.apache.http.nio.IOControl;
41
42
43
44
45
46
47
48
49
50 @Deprecated
51 public class NHttpEntityWrapper
52 extends HttpEntityWrapper implements ProducingNHttpEntity {
53
54 private final ReadableByteChannel channel;
55 private final ByteBuffer buffer;
56
57 public NHttpEntityWrapper(final HttpEntity httpEntity) throws IOException {
58 super(httpEntity);
59 this.channel = Channels.newChannel(httpEntity.getContent());
60 this.buffer = ByteBuffer.allocate(4096);
61 }
62
63
64
65
66 @Override
67 public InputStream getContent() throws IOException, UnsupportedOperationException {
68 throw new UnsupportedOperationException("Does not support blocking methods");
69 }
70
71 @Override
72 public boolean isStreaming() {
73 return true;
74 }
75
76
77
78
79 @Override
80 public void writeTo(final OutputStream out) throws IOException, UnsupportedOperationException {
81 throw new UnsupportedOperationException("Does not support blocking methods");
82 }
83
84 @Override
85 public void produceContent(
86 final ContentEncoder encoder,
87 final IOControl ioControl) throws IOException {
88 final int i = this.channel.read(this.buffer);
89 this.buffer.flip();
90 encoder.write(this.buffer);
91 final boolean buffering = this.buffer.hasRemaining();
92 this.buffer.compact();
93 if (i == -1 && !buffering) {
94 encoder.complete();
95 this.channel.close();
96 }
97 }
98
99 @Override
100 public void finish() {
101 try {
102 this.channel.close();
103 } catch (final IOException ignore) {
104 }
105 }
106
107 }