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");
|
||||
}
|
||||
final byte[] headerBuffer = new byte[totalHeaderSize - tmpBuffer.length];
|
||||
if (headerBuffer.length != input.read(headerBuffer)) {
|
||||
throw new UnsupportedFormatException("File shorter than specified in the header");
|
||||
}
|
||||
readStreamExhaustively(input, headerBuffer);
|
||||
final HashMap<String, String> attributes =
|
||||
BinaryDictDecoderUtils.decodeHeaderAttributes(headerBuffer);
|
||||
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 {
|
||||
final byte[] buffer = new byte[COPY_BUFFER_SIZE];
|
||||
for (int readBytes = input.read(buffer); readBytes >= 0; readBytes = input.read(buffer)) {
|
||||
|
|
Loading…
Reference in New Issue