| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -61,7 +61,6 @@ public InputStreamBufferInput(InputStream in, int bufferSize) | |||
| 61 | 61 | * @return the old resource | |
| 62 | 62 | */ | |
| 63 | 63 | public InputStream reset(InputStream in) | |
| 64 | - throws IOException | ||
| 65 | 64 | { | |
| 66 | 65 | InputStream old = this.in; | |
| 67 | 66 | this.in = in; | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -40,6 +40,8 @@ public class MessagePackFactory | |||
| 40 | 40 | private final MessagePack.PackerConfig packerConfig; | |
| 41 | 41 | private boolean reuseResourceInGenerator = true; | |
| 42 | 42 | private boolean reuseResourceInParser = true; | |
| 43 | + private boolean reuseInputStreamBufferInput = true; | ||
| 44 | + | ||
| 43 | 45 | private ExtensionTypeCustomDeserializers extTypeCustomDesers; | |
| 44 | 46 | ||
| 45 | 47 | public MessagePackFactory() | |
@@ -58,6 +60,7 @@ public MessagePackFactory(MessagePackFactory src) | |||
| 58 | 60 | this.packerConfig = src.packerConfig.clone(); | |
| 59 | 61 | this.reuseResourceInGenerator = src.reuseResourceInGenerator; | |
| 60 | 62 | this.reuseResourceInParser = src.reuseResourceInParser; | |
| 63 | + this.reuseInputStreamBufferInput = src.reuseInputStreamBufferInput; | ||
| 61 | 64 | if (src.extTypeCustomDesers != null) { | |
| 62 | 65 | this.extTypeCustomDesers = new ExtensionTypeCustomDeserializers(src.extTypeCustomDesers); | |
| 63 | 66 | } | |
@@ -75,6 +78,12 @@ public MessagePackFactory setReuseResourceInParser(boolean reuseResourceInParser | |||
| 75 | 78 | return this; | |
| 76 | 79 | } | |
| 77 | 80 | ||
| 81 | + public MessagePackFactory setReuseInputStreamBufferInput(boolean reuseInputStreamBufferInput) | ||
| 82 | + { | ||
| 83 | + this.reuseInputStreamBufferInput = reuseInputStreamBufferInput; | ||
| 84 | + return this; | ||
| 85 | + } | ||
| 86 | + | ||
| 78 | 87 | public MessagePackFactory setExtTypeCustomDesers(ExtensionTypeCustomDeserializers extTypeCustomDesers) | |
| 79 | 88 | { | |
| 80 | 89 | this.extTypeCustomDesers = extTypeCustomDesers; | |
@@ -167,6 +176,12 @@ boolean isReuseResourceInParser() | |||
| 167 | 176 | return reuseResourceInParser; | |
| 168 | 177 | } | |
| 169 | 178 | ||
| 179 | + @VisibleForTesting | ||
| 180 | + boolean isReuseInputStreamBufferInput() | ||
| 181 | + { | ||
| 182 | + return reuseInputStreamBufferInput; | ||
| 183 | + } | ||
| 184 | + | ||
| 170 | 185 | @VisibleForTesting | |
| 171 | 186 | ExtensionTypeCustomDeserializers getExtTypeCustomDesers() | |
| 172 | 187 | { | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -49,6 +49,10 @@ public class MessagePackParser | |||
| 49 | 49 | { | |
| 50 | 50 | private static final ThreadLocal<Tuple<Object, MessageUnpacker>> messageUnpackerHolder = | |
| 51 | 51 | new ThreadLocal<Tuple<Object, MessageUnpacker>>(); | |
| 52 | + | ||
| 53 | + private static final ThreadLocal<InputStreamBufferInput> inputStreamBufferInputHolder = | ||
| 54 | + new ThreadLocal<>(); | ||
| 55 | + | ||
| 52 | 56 | private final MessageUnpacker messageUnpacker; | |
| 53 | 57 | ||
| 54 | 58 | private static final BigInteger LONG_MIN = BigInteger.valueOf((long) Long.MIN_VALUE); | |
@@ -130,7 +134,36 @@ public MessagePackParser( | |||
| 130 | 134 | boolean reuseResourceInParser) | |
| 131 | 135 | throws IOException | |
| 132 | 136 | { | |
| 133 | - this(ctxt, features, new InputStreamBufferInput(in), objectCodec, in, reuseResourceInParser); | ||
| 137 | + this(ctxt, features, objectCodec, in, reuseResourceInParser, true); | ||
| 138 | + } | ||
| 139 | + | ||
| 140 | + public MessagePackParser( | ||
| 141 | + IOContext ctxt, | ||
| 142 | + int features, | ||
| 143 | + ObjectCodec objectCodec, | ||
| 144 | + InputStream in, | ||
| 145 | + boolean reuseResourceInParser, | ||
| 146 | + boolean reuseInputStreamBufferInput) | ||
| 147 | + throws IOException | ||
| 148 | + { | ||
| 149 | + this(ctxt, features, getInputStreamBufferInput(in, reuseInputStreamBufferInput), objectCodec, in, reuseResourceInParser); | ||
| 150 | + } | ||
| 151 | + | ||
| 152 | + private static InputStreamBufferInput getInputStreamBufferInput(InputStream in, boolean reuseInputStreamBufferInput) | ||
| 153 | + { | ||
| 154 | + if (reuseInputStreamBufferInput) { | ||
| 155 | + final InputStreamBufferInput inputStreamBufferInput = inputStreamBufferInputHolder.get(); | ||
| 156 | + if (inputStreamBufferInput != null) { | ||
| 157 | + inputStreamBufferInput.reset(in); | ||
| 158 | + return inputStreamBufferInput; | ||
| 159 | + } | ||
| 160 | + final InputStreamBufferInput newInputStreamBufferInput = new InputStreamBufferInput(in); | ||
| 161 | + inputStreamBufferInputHolder.set(newInputStreamBufferInput); | ||
| 162 | + return newInputStreamBufferInput; | ||
| 163 | + } | ||
| 164 | + else { | ||
| 165 | + return new InputStreamBufferInput(in); | ||
| 166 | + } | ||
| 134 | 167 | } | |
| 135 | 168 | ||
| 136 | 169 | public MessagePackParser(IOContext ctxt, int features, ObjectCodec objectCodec, byte[] bytes) | |
| Back | FazBrowse Home | New Git URL |
0 commit comments