diff options
author | 2014-11-12 02:14:42 +0000 | |
---|---|---|
committer | 2014-11-12 02:14:42 +0000 | |
commit | 05f7f22a593ebe678a02017139ad395a08c4089d (patch) | |
tree | 61796acd0ce09551ac35755e3722df7d3d435e8c | |
parent | d6ba40c67af6942e2eb5282714ced47f69e94708 (diff) | |
parent | 9f46834839dadce7fdb8f8c9d6bb43dd8f760dd0 (diff) | |
download | latinime-05f7f22a593ebe678a02017139ad395a08c4089d.tar.gz latinime-05f7f22a593ebe678a02017139ad395a08c4089d.tar.xz latinime-05f7f22a593ebe678a02017139ad395a08c4089d.zip |
am 9f468348: dicttool header to read stream exhaustively
* commit '9f46834839dadce7fdb8f8c9d6bb43dd8f760dd0':
dicttool header to read stream exhaustively
-rw-r--r-- | tools/dicttool/src/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtils.java | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtils.java b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtils.java index 3ec28f313..84c3956f7 100644 --- a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtils.java +++ b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtils.java @@ -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)) { |