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 package org.apache.hc.core5.http.nio.entity;
28
29 import java.io.IOException;
30 import java.nio.CharBuffer;
31
32 import org.apache.hc.core5.http.ContentType;
33 import org.apache.hc.core5.http.HttpException;
34 import org.apache.hc.core5.http.config.CharCodingConfig;
35 import org.apache.hc.core5.util.Args;
36 import org.apache.hc.core5.util.CharArrayBuffer;
37
38
39
40
41
42
43
44 public class StringAsyncEntityConsumer extends AbstractCharAsyncEntityConsumer<String> {
45
46 private final int capacityIncrement;
47 private final CharArrayBuffer content;
48
49 public StringAsyncEntityConsumer(final int bufSize, final int capacityIncrement, final CharCodingConfig charCodingConfig) {
50 super(bufSize, charCodingConfig);
51 this.capacityIncrement = Args.positive(capacityIncrement, "Capacity increment");
52 this.content = new CharArrayBuffer(1024);
53 }
54
55 public StringAsyncEntityConsumer(final int capacityIncrement) {
56 this(DEF_BUF_SIZE, capacityIncrement, CharCodingConfig.DEFAULT);
57 }
58
59 public StringAsyncEntityConsumer(final CharCodingConfig charCodingConfig) {
60 this(DEF_BUF_SIZE, Integer.MAX_VALUE, charCodingConfig);
61 }
62
63 public StringAsyncEntityConsumer() {
64 this(Integer.MAX_VALUE);
65 }
66
67 @Override
68 protected final void streamStart(final ContentType contentType) throws HttpException, IOException {
69 }
70
71 @Override
72 protected int capacityIncrement() {
73 final int available = content.capacity() - content.length();
74 return Math.max(capacityIncrement, available);
75 }
76
77 @Override
78 protected final void data(final CharBuffer src, final boolean endOfStream) {
79 Args.notNull(src, "CharBuffer");
80 final int chunk = src.remaining();
81 content.ensureCapacity(chunk);
82 src.get(content.array(), content.length(), chunk);
83 content.setLength(content.length() + chunk);
84 }
85
86 @Override
87 public String generateContent() {
88 return content.toString();
89 }
90
91 @Override
92 public void releaseResources() {
93 content.clear();
94 }
95
96 }