diff options
author | 2013-08-18 19:36:15 -0700 | |
---|---|---|
committer | 2013-08-18 19:36:15 -0700 | |
commit | 41aade7977ee7313df8aa25e34c026dc034c8673 (patch) | |
tree | 2cc24ab73a85d289d6ac841093c3efecb80ee84b /java/src/com/android/inputmethod/latin/makedict/BinaryDictReader.java | |
parent | 376457477f4118e2e8e4c5bb2df9679f6ab0b899 (diff) | |
parent | a83e25642f1eae1412d85ce72f27601edd0ac10d (diff) | |
download | latinime-41aade7977ee7313df8aa25e34c026dc034c8673.tar.gz latinime-41aade7977ee7313df8aa25e34c026dc034c8673.tar.xz latinime-41aade7977ee7313df8aa25e34c026dc034c8673.zip |
am a83e2564: Merge "Add HeaderReaderInterface."
* commit 'a83e25642f1eae1412d85ce72f27601edd0ac10d':
Add HeaderReaderInterface.
Diffstat (limited to 'java/src/com/android/inputmethod/latin/makedict/BinaryDictReader.java')
-rw-r--r-- | java/src/com/android/inputmethod/latin/makedict/BinaryDictReader.java | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/java/src/com/android/inputmethod/latin/makedict/BinaryDictReader.java b/java/src/com/android/inputmethod/latin/makedict/BinaryDictReader.java index f2f3c465d..6d3b31a28 100644 --- a/java/src/com/android/inputmethod/latin/makedict/BinaryDictReader.java +++ b/java/src/com/android/inputmethod/latin/makedict/BinaryDictReader.java @@ -17,7 +17,9 @@ package com.android.inputmethod.latin.makedict; import com.android.inputmethod.annotations.UsedForTesting; +import com.android.inputmethod.latin.makedict.BinaryDictDecoder.CharEncoding; import com.android.inputmethod.latin.makedict.BinaryDictDecoder.FusionDictionaryBufferInterface; +import com.android.inputmethod.latin.makedict.decoder.HeaderReaderInterface; import com.android.inputmethod.latin.utils.ByteArrayWrapper; import java.io.File; @@ -27,8 +29,9 @@ import java.io.IOException; import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; +import java.util.HashMap; -public class BinaryDictReader { +public class BinaryDictReader implements HeaderReaderInterface { public interface FusionDictionaryBufferFactory { public FusionDictionaryBufferInterface getFusionDictionaryBuffer(final File file) @@ -133,4 +136,34 @@ public class BinaryDictReader { openBuffer(factory); return getBuffer(); } + + // The implementation of HeaderReaderInterface + @Override + public int readVersion() throws IOException, UnsupportedFormatException { + return BinaryDictDecoder.checkFormatVersion(mFusionDictionaryBuffer); + } + + @Override + public int readOptionFlags() { + return mFusionDictionaryBuffer.readUnsignedShort(); + } + + @Override + public int readHeaderSize() { + return mFusionDictionaryBuffer.readInt(); + } + + @Override + public HashMap<String, String> readAttributes(final int headerSize) { + final HashMap<String, String> attributes = new HashMap<String, String>(); + while (mFusionDictionaryBuffer.position() < headerSize) { + // We can avoid infinite loop here since mFusionDictonary.position() is always increased + // by calling CharEncoding.readString. + final String key = CharEncoding.readString(mFusionDictionaryBuffer); + final String value = CharEncoding.readString(mFusionDictionaryBuffer); + attributes.put(key, value); + } + mFusionDictionaryBuffer.position(headerSize); + return attributes; + } } |