dicttool header to read stream exhaustively
Change-Id: I50a286c115f5bd6e93763bd2f79031676d6fffd8main
parent
1e72f9da12
commit
9f46834839
|
@ -186,9 +186,7 @@ public final class BinaryDictOffdeviceUtils {
|
||||||
throw new UnsupportedFormatException("Header too large");
|
throw new UnsupportedFormatException("Header too large");
|
||||||
}
|
}
|
||||||
final byte[] headerBuffer = new byte[totalHeaderSize - tmpBuffer.length];
|
final byte[] headerBuffer = new byte[totalHeaderSize - tmpBuffer.length];
|
||||||
if (headerBuffer.length != input.read(headerBuffer)) {
|
readStreamExhaustively(input, headerBuffer);
|
||||||
throw new UnsupportedFormatException("File shorter than specified in the header");
|
|
||||||
}
|
|
||||||
final HashMap<String, String> attributes =
|
final HashMap<String, String> attributes =
|
||||||
BinaryDictDecoderUtils.decodeHeaderAttributes(headerBuffer);
|
BinaryDictDecoderUtils.decodeHeaderAttributes(headerBuffer);
|
||||||
return new DictionaryHeader(totalHeaderSize, new DictionaryOptions(attributes),
|
return new DictionaryHeader(totalHeaderSize, new DictionaryOptions(attributes),
|
||||||
|
@ -196,6 +194,20 @@ public final class BinaryDictOffdeviceUtils {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void readStreamExhaustively(final InputStream inputStream,
|
||||||
|
final byte[] outBuffer) throws IOException, UnsupportedFormatException {
|
||||||
|
int readBytes = 0;
|
||||||
|
int readBytesLastCycle = -1;
|
||||||
|
while (readBytes != outBuffer.length) {
|
||||||
|
readBytesLastCycle = inputStream.read(outBuffer, readBytes,
|
||||||
|
outBuffer.length - readBytes);
|
||||||
|
if (readBytesLastCycle == -1)
|
||||||
|
throw new UnsupportedFormatException("File shorter than specified in the header"
|
||||||
|
+ " (expected " + outBuffer.length + ", read " + readBytes + ")");
|
||||||
|
readBytes += readBytesLastCycle;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static void copy(final InputStream input, final OutputStream output) throws IOException {
|
public static void copy(final InputStream input, final OutputStream output) throws IOException {
|
||||||
final byte[] buffer = new byte[COPY_BUFFER_SIZE];
|
final byte[] buffer = new byte[COPY_BUFFER_SIZE];
|
||||||
for (int readBytes = input.read(buffer); readBytes >= 0; readBytes = input.read(buffer)) {
|
for (int readBytes = input.read(buffer); readBytes >= 0; readBytes = input.read(buffer)) {
|
||||||
|
|
Loading…
Reference in New Issue