151 }
152
153 private static String reconstruct(StringsProvider reader, DataInputStream cr)
154 throws IOException {
155 int descIndex = CompressIndexes.readInt(cr);
156 String desc = reader.getString(descIndex);
157 byte[] encodedDesc = getEncoded(desc);
158 int indexes_length = CompressIndexes.readInt(cr);
159 byte[] bytes = new byte[indexes_length];
160 cr.readFully(bytes);
161 List<Integer> indices = CompressIndexes.decompressFlow(bytes);
162 ByteBuffer buffer = ByteBuffer.allocate(encodedDesc.length * 2);
163 buffer.order(ByteOrder.BIG_ENDIAN);
164 int argIndex = 0;
165 for (byte c : encodedDesc) {
166 if (c == 'L') {
167 buffer = safeAdd(buffer, c);
168 int index = indices.get(argIndex);
169 argIndex += 1;
170 String pkg = reader.getString(index);
171 if (pkg.length() > 0) {
172 pkg = pkg + "/";
173 byte[] encoded = getEncoded(pkg);
174 buffer = safeAdd(buffer, encoded);
175 }
176 int classIndex = indices.get(argIndex);
177 argIndex += 1;
178 String clazz = reader.getString(classIndex);
179 byte[] encoded = getEncoded(clazz);
180 buffer = safeAdd(buffer, encoded);
181 } else {
182 buffer = safeAdd(buffer, c);
183 }
184 }
185
186 byte[] encoded = buffer.array();
187 ByteBuffer result = ByteBuffer.allocate(encoded.length + 2);
188 result.order(ByteOrder.BIG_ENDIAN);
189 result.putShort((short) buffer.position());
190 result.put(encoded, 0, buffer.position());
191 ByteArrayInputStream stream = new ByteArrayInputStream(result.array());
|
151 }
152
153 private static String reconstruct(StringsProvider reader, DataInputStream cr)
154 throws IOException {
155 int descIndex = CompressIndexes.readInt(cr);
156 String desc = reader.getString(descIndex);
157 byte[] encodedDesc = getEncoded(desc);
158 int indexes_length = CompressIndexes.readInt(cr);
159 byte[] bytes = new byte[indexes_length];
160 cr.readFully(bytes);
161 List<Integer> indices = CompressIndexes.decompressFlow(bytes);
162 ByteBuffer buffer = ByteBuffer.allocate(encodedDesc.length * 2);
163 buffer.order(ByteOrder.BIG_ENDIAN);
164 int argIndex = 0;
165 for (byte c : encodedDesc) {
166 if (c == 'L') {
167 buffer = safeAdd(buffer, c);
168 int index = indices.get(argIndex);
169 argIndex += 1;
170 String pkg = reader.getString(index);
171 if (!pkg.isEmpty()) {
172 pkg = pkg + "/";
173 byte[] encoded = getEncoded(pkg);
174 buffer = safeAdd(buffer, encoded);
175 }
176 int classIndex = indices.get(argIndex);
177 argIndex += 1;
178 String clazz = reader.getString(classIndex);
179 byte[] encoded = getEncoded(clazz);
180 buffer = safeAdd(buffer, encoded);
181 } else {
182 buffer = safeAdd(buffer, c);
183 }
184 }
185
186 byte[] encoded = buffer.array();
187 ByteBuffer result = ByteBuffer.allocate(encoded.length + 2);
188 result.order(ByteOrder.BIG_ENDIAN);
189 result.putShort((short) buffer.position());
190 result.put(encoded, 0, buffer.position());
191 ByteArrayInputStream stream = new ByteArrayInputStream(result.array());
|