am e9a10ff0: Add DictDecoder.readDictionaryBinary.
* commit 'e9a10ff0f026b5ec458f116afc7a75806574cbcd': Add DictDecoder.readDictionaryBinary.main
commit
6bdc19173f
|
@ -229,8 +229,6 @@ final public class BinaryDictionaryGetter {
|
||||||
try {
|
try {
|
||||||
// Read the version of the file
|
// Read the version of the file
|
||||||
final Ver3DictDecoder dictDecoder = new Ver3DictDecoder(f);
|
final Ver3DictDecoder dictDecoder = new Ver3DictDecoder(f);
|
||||||
dictDecoder.openDictBuffer(
|
|
||||||
new Ver3DictDecoder.DictionaryBufferFromReadOnlyByteBufferFactory());
|
|
||||||
final FileHeader header = dictDecoder.readHeader();
|
final FileHeader header = dictDecoder.readHeader();
|
||||||
|
|
||||||
final String version = header.mDictionaryOptions.mAttributes.get(VERSION_KEY);
|
final String version = header.mDictionaryOptions.mAttributes.get(VERSION_KEY);
|
||||||
|
|
|
@ -559,17 +559,9 @@ public final class BinaryDictDecoderUtils {
|
||||||
* @return the created (or merged) dictionary.
|
* @return the created (or merged) dictionary.
|
||||||
*/
|
*/
|
||||||
@UsedForTesting
|
@UsedForTesting
|
||||||
public static FusionDictionary readDictionaryBinary(final Ver3DictDecoder dictDecoder,
|
/* package */ static FusionDictionary readDictionaryBinary(final Ver3DictDecoder dictDecoder,
|
||||||
final FusionDictionary dict) throws FileNotFoundException, IOException,
|
final FusionDictionary dict) throws FileNotFoundException, IOException,
|
||||||
UnsupportedFormatException {
|
UnsupportedFormatException {
|
||||||
|
|
||||||
// if the buffer has not been opened, open the buffer with bytebuffer.
|
|
||||||
if (dictDecoder.getDictBuffer() == null) dictDecoder.openDictBuffer(
|
|
||||||
new Ver3DictDecoder.DictionaryBufferFromReadOnlyByteBufferFactory());
|
|
||||||
if (dictDecoder.getDictBuffer() == null) {
|
|
||||||
MakedictLog.e("Cannot open the buffer");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Read header
|
// Read header
|
||||||
final FileHeader fileHeader = dictDecoder.readHeader();
|
final FileHeader fileHeader = dictDecoder.readHeader();
|
||||||
|
|
||||||
|
|
|
@ -521,20 +521,21 @@ public final class BinaryDictIOUtils {
|
||||||
final File file, final long offset, final long length)
|
final File file, final long offset, final long length)
|
||||||
throws FileNotFoundException, IOException, UnsupportedFormatException {
|
throws FileNotFoundException, IOException, UnsupportedFormatException {
|
||||||
final byte[] buffer = new byte[HEADER_READING_BUFFER_SIZE];
|
final byte[] buffer = new byte[HEADER_READING_BUFFER_SIZE];
|
||||||
final Ver3DictDecoder dictDecoder = new Ver3DictDecoder(file);
|
final Ver3DictDecoder dictDecoder = new Ver3DictDecoder(file,
|
||||||
dictDecoder.openDictBuffer(new DictDecoder.DictionaryBufferFactory() {
|
new DictDecoder.DictionaryBufferFactory() {
|
||||||
@Override
|
@Override
|
||||||
public DictBuffer getDictionaryBuffer(File file)
|
public DictBuffer getDictionaryBuffer(File file)
|
||||||
throws FileNotFoundException, IOException {
|
throws FileNotFoundException, IOException {
|
||||||
final FileInputStream inStream = new FileInputStream(file);
|
final FileInputStream inStream = new FileInputStream(file);
|
||||||
try {
|
try {
|
||||||
inStream.read(buffer);
|
inStream.read(buffer);
|
||||||
return new ByteArrayDictBuffer(buffer);
|
return new ByteArrayDictBuffer(buffer);
|
||||||
} finally {
|
} finally {
|
||||||
inStream.close();
|
inStream.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
);
|
||||||
});
|
|
||||||
return dictDecoder.readHeader();
|
return dictDecoder.readHeader();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -44,6 +44,26 @@ public interface DictDecoder {
|
||||||
*/
|
*/
|
||||||
public CharGroupInfo readPtNode(final int ptNodePos, final FormatOptions formatOptions);
|
public CharGroupInfo readPtNode(final int ptNodePos, final FormatOptions formatOptions);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads a buffer and returns the memory representation of the dictionary.
|
||||||
|
*
|
||||||
|
* This high-level method takes a buffer and reads its contents, populating a
|
||||||
|
* FusionDictionary structure. The optional dict argument is an existing dictionary to
|
||||||
|
* which words from the buffer should be added. If it is null, a new dictionary is created.
|
||||||
|
*
|
||||||
|
* @param dict an optional dictionary to add words to, or null.
|
||||||
|
* @return the created (or merged) dictionary.
|
||||||
|
*/
|
||||||
|
@UsedForTesting
|
||||||
|
public FusionDictionary readDictionaryBinary(final FusionDictionary dict)
|
||||||
|
throws FileNotFoundException, IOException, UnsupportedFormatException;
|
||||||
|
|
||||||
|
// Flags for DictionaryBufferFactory.
|
||||||
|
public static final int USE_READONLY_BYTEBUFFER = 0x01000000;
|
||||||
|
public static final int USE_BYTEARRAY = 0x02000000;
|
||||||
|
public static final int USE_WRITABLE_BYTEBUFFER = 0x04000000;
|
||||||
|
public static final int MASK_DICTBUFFER = 0x0F000000;
|
||||||
|
|
||||||
public interface DictionaryBufferFactory {
|
public interface DictionaryBufferFactory {
|
||||||
public DictBuffer getDictionaryBuffer(final File file)
|
public DictBuffer getDictionaryBuffer(final File file)
|
||||||
throws FileNotFoundException, IOException;
|
throws FileNotFoundException, IOException;
|
||||||
|
|
|
@ -165,31 +165,53 @@ public class Ver3DictDecoder implements DictDecoder {
|
||||||
}
|
}
|
||||||
|
|
||||||
private final File mDictionaryBinaryFile;
|
private final File mDictionaryBinaryFile;
|
||||||
|
private final DictionaryBufferFactory mBufferFactory;
|
||||||
private DictBuffer mDictBuffer;
|
private DictBuffer mDictBuffer;
|
||||||
|
|
||||||
public Ver3DictDecoder(final File file) {
|
public Ver3DictDecoder(final File file) {
|
||||||
|
this(file, USE_READONLY_BYTEBUFFER);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Ver3DictDecoder(final File file, final int factoryFlag) {
|
||||||
mDictionaryBinaryFile = file;
|
mDictionaryBinaryFile = file;
|
||||||
mDictBuffer = null;
|
mDictBuffer = null;
|
||||||
|
|
||||||
|
if ((factoryFlag & MASK_DICTBUFFER) == USE_READONLY_BYTEBUFFER) {
|
||||||
|
mBufferFactory = new DictionaryBufferFromReadOnlyByteBufferFactory();
|
||||||
|
} else if ((factoryFlag & MASK_DICTBUFFER) == USE_BYTEARRAY) {
|
||||||
|
mBufferFactory = new DictionaryBufferFromByteArrayFactory();
|
||||||
|
} else if ((factoryFlag & MASK_DICTBUFFER) == USE_WRITABLE_BYTEBUFFER) {
|
||||||
|
mBufferFactory = new DictionaryBufferFromWritableByteBufferFactory();
|
||||||
|
} else {
|
||||||
|
mBufferFactory = new DictionaryBufferFromReadOnlyByteBufferFactory();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void openDictBuffer(final DictDecoder.DictionaryBufferFactory factory)
|
public Ver3DictDecoder(final File file, final DictionaryBufferFactory factory) {
|
||||||
throws FileNotFoundException, IOException {
|
mDictionaryBinaryFile = file;
|
||||||
mDictBuffer = factory.getDictionaryBuffer(mDictionaryBinaryFile);
|
mBufferFactory = factory;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DictBuffer getDictBuffer() {
|
public void openDictBuffer() throws FileNotFoundException, IOException {
|
||||||
|
mDictBuffer = mBufferFactory.getDictionaryBuffer(mDictionaryBinaryFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* package */ DictBuffer getDictBuffer() {
|
||||||
return mDictBuffer;
|
return mDictBuffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@UsedForTesting
|
@UsedForTesting
|
||||||
public DictBuffer openAndGetDictBuffer(final DictDecoder.DictionaryBufferFactory factory)
|
/* package */ DictBuffer openAndGetDictBuffer() throws FileNotFoundException, IOException {
|
||||||
throws FileNotFoundException, IOException {
|
openDictBuffer();
|
||||||
openDictBuffer(factory);
|
|
||||||
return getDictBuffer();
|
return getDictBuffer();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public FileHeader readHeader() throws IOException, UnsupportedFormatException {
|
public FileHeader readHeader() throws IOException, UnsupportedFormatException {
|
||||||
|
if (mDictBuffer == null) {
|
||||||
|
openDictBuffer();
|
||||||
|
}
|
||||||
|
|
||||||
final int version = HeaderReader.readVersion(mDictBuffer);
|
final int version = HeaderReader.readVersion(mDictBuffer);
|
||||||
final int optionsFlags = HeaderReader.readOptionFlags(mDictBuffer);
|
final int optionsFlags = HeaderReader.readOptionFlags(mDictBuffer);
|
||||||
|
|
||||||
|
@ -278,4 +300,13 @@ public class Ver3DictDecoder implements DictDecoder {
|
||||||
return new CharGroupInfo(ptNodePos, addressPointer, flags, characters, frequency,
|
return new CharGroupInfo(ptNodePos, addressPointer, flags, characters, frequency,
|
||||||
parentAddress, childrenAddress, shortcutTargets, bigrams);
|
parentAddress, childrenAddress, shortcutTargets, bigrams);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FusionDictionary readDictionaryBinary(final FusionDictionary dict)
|
||||||
|
throws FileNotFoundException, IOException, UnsupportedFormatException {
|
||||||
|
if (mDictBuffer == null) {
|
||||||
|
openDictBuffer();
|
||||||
|
}
|
||||||
|
return BinaryDictDecoderUtils.readDictionaryBinary(this, dict);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,7 @@ import com.android.inputmethod.latin.ExpandableDictionary;
|
||||||
import com.android.inputmethod.latin.LatinImeLogger;
|
import com.android.inputmethod.latin.LatinImeLogger;
|
||||||
import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
|
import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
|
||||||
import com.android.inputmethod.latin.WordComposer;
|
import com.android.inputmethod.latin.WordComposer;
|
||||||
|
import com.android.inputmethod.latin.makedict.DictDecoder;
|
||||||
import com.android.inputmethod.latin.makedict.DictEncoder;
|
import com.android.inputmethod.latin.makedict.DictEncoder;
|
||||||
import com.android.inputmethod.latin.makedict.FormatSpec.FormatOptions;
|
import com.android.inputmethod.latin.makedict.FormatSpec.FormatOptions;
|
||||||
import com.android.inputmethod.latin.makedict.Ver3DictDecoder;
|
import com.android.inputmethod.latin.makedict.Ver3DictDecoder;
|
||||||
|
@ -242,11 +243,12 @@ public abstract class DynamicPredictionDictionaryBase extends ExpandableDictiona
|
||||||
};
|
};
|
||||||
|
|
||||||
// Load the dictionary from binary file
|
// Load the dictionary from binary file
|
||||||
final Ver3DictDecoder reader = new Ver3DictDecoder(
|
final File dictFile = new File(getContext().getFilesDir(), fileName);
|
||||||
new File(getContext().getFilesDir(), fileName));
|
final Ver3DictDecoder dictDecoder = new Ver3DictDecoder(dictFile,
|
||||||
|
DictDecoder.USE_BYTEARRAY);
|
||||||
try {
|
try {
|
||||||
reader.openDictBuffer(new Ver3DictDecoder.DictionaryBufferFromByteArrayFactory());
|
dictDecoder.openDictBuffer();
|
||||||
UserHistoryDictIOUtils.readDictionaryBinary(reader, listener);
|
UserHistoryDictIOUtils.readDictionaryBinary(dictDecoder, listener);
|
||||||
} catch (FileNotFoundException e) {
|
} catch (FileNotFoundException e) {
|
||||||
// This is an expected condition: we don't have a user history dictionary for this
|
// This is an expected condition: we don't have a user history dictionary for this
|
||||||
// language yet. It will be created sometime later.
|
// language yet. It will be created sometime later.
|
||||||
|
|
|
@ -33,7 +33,6 @@ import com.android.inputmethod.latin.utils.CollectionUtils;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.FileNotFoundException;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
@ -133,17 +132,15 @@ public class BinaryDictDecoderEncoderTests extends AndroidTestCase {
|
||||||
// Utilities for test
|
// Utilities for test
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Makes new DictBuffer according to BUFFER_TYPE.
|
* Makes new DictDecoder according to BUFFER_TYPE.
|
||||||
*/
|
*/
|
||||||
private void getDictBuffer(final Ver3DictDecoder dictDecoder, final int bufferType)
|
private Ver3DictDecoder getDictDecoder(final File file, final int bufferType) {
|
||||||
throws FileNotFoundException, IOException {
|
|
||||||
if (bufferType == USE_BYTE_BUFFER) {
|
if (bufferType == USE_BYTE_BUFFER) {
|
||||||
dictDecoder.openDictBuffer(
|
return new Ver3DictDecoder(file, DictDecoder.USE_READONLY_BYTEBUFFER);
|
||||||
new Ver3DictDecoder.DictionaryBufferFromReadOnlyByteBufferFactory());
|
} else if (bufferType == USE_BYTE_ARRAY) {
|
||||||
} else if (bufferType == USE_BYTE_ARRAY) {
|
return new Ver3DictDecoder(file, DictDecoder.USE_BYTEARRAY);
|
||||||
dictDecoder.openDictBuffer(
|
|
||||||
new Ver3DictDecoder.DictionaryBufferFromByteArrayFactory());
|
|
||||||
}
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -284,14 +281,14 @@ public class BinaryDictDecoderEncoderTests extends AndroidTestCase {
|
||||||
final SparseArray<List<Integer>> bigrams, final Map<String, List<String>> shortcutMap,
|
final SparseArray<List<Integer>> bigrams, final Map<String, List<String>> shortcutMap,
|
||||||
final int bufferType) {
|
final int bufferType) {
|
||||||
long now, diff = -1;
|
long now, diff = -1;
|
||||||
final Ver3DictDecoder dictDecoder = new Ver3DictDecoder(file);
|
|
||||||
|
|
||||||
FusionDictionary dict = null;
|
FusionDictionary dict = null;
|
||||||
try {
|
try {
|
||||||
getDictBuffer(dictDecoder, bufferType);
|
final Ver3DictDecoder dictDecoder = getDictDecoder(file, bufferType);
|
||||||
|
dictDecoder.openDictBuffer();
|
||||||
assertNotNull(dictDecoder.getDictBuffer());
|
assertNotNull(dictDecoder.getDictBuffer());
|
||||||
now = System.currentTimeMillis();
|
now = System.currentTimeMillis();
|
||||||
dict = BinaryDictDecoderUtils.readDictionaryBinary(dictDecoder, null);
|
dict = dictDecoder.readDictionaryBinary(null);
|
||||||
diff = System.currentTimeMillis() - now;
|
diff = System.currentTimeMillis() - now;
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
Log.e(TAG, "IOException while reading dictionary", e);
|
Log.e(TAG, "IOException while reading dictionary", e);
|
||||||
|
@ -444,9 +441,9 @@ public class BinaryDictDecoderEncoderTests extends AndroidTestCase {
|
||||||
final Map<Integer, Integer> resultFreqs = CollectionUtils.newTreeMap();
|
final Map<Integer, Integer> resultFreqs = CollectionUtils.newTreeMap();
|
||||||
|
|
||||||
long now = -1, diff = -1;
|
long now = -1, diff = -1;
|
||||||
final Ver3DictDecoder dictDecoder = new Ver3DictDecoder(file);
|
|
||||||
try {
|
try {
|
||||||
getDictBuffer(dictDecoder, bufferType);
|
final Ver3DictDecoder dictDecoder = getDictDecoder(file, bufferType);
|
||||||
|
dictDecoder.openDictBuffer();
|
||||||
assertNotNull("Can't get buffer.", dictDecoder.getDictBuffer());
|
assertNotNull("Can't get buffer.", dictDecoder.getDictBuffer());
|
||||||
now = System.currentTimeMillis();
|
now = System.currentTimeMillis();
|
||||||
BinaryDictIOUtils.readUnigramsAndBigramsBinary(dictDecoder, resultWords, resultFreqs,
|
BinaryDictIOUtils.readUnigramsAndBigramsBinary(dictDecoder, resultWords, resultFreqs,
|
||||||
|
@ -587,10 +584,9 @@ public class BinaryDictDecoderEncoderTests extends AndroidTestCase {
|
||||||
addUnigrams(sWords.size(), dict, sWords, null /* shortcutMap */);
|
addUnigrams(sWords.size(), dict, sWords, null /* shortcutMap */);
|
||||||
timeWritingDictToFile(file, dict, VERSION3_WITH_DYNAMIC_UPDATE);
|
timeWritingDictToFile(file, dict, VERSION3_WITH_DYNAMIC_UPDATE);
|
||||||
|
|
||||||
final Ver3DictDecoder dictDecoder = new Ver3DictDecoder(file);
|
final Ver3DictDecoder dictDecoder = new Ver3DictDecoder(file, DictDecoder.USE_BYTEARRAY);
|
||||||
try {
|
try {
|
||||||
dictDecoder.openDictBuffer(
|
dictDecoder.openDictBuffer();
|
||||||
new Ver3DictDecoder.DictionaryBufferFromByteArrayFactory());
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
// ignore
|
// ignore
|
||||||
Log.e(TAG, "IOException while opening the buffer", e);
|
Log.e(TAG, "IOException while opening the buffer", e);
|
||||||
|
@ -648,10 +644,9 @@ public class BinaryDictDecoderEncoderTests extends AndroidTestCase {
|
||||||
addUnigrams(sWords.size(), dict, sWords, null /* shortcutMap */);
|
addUnigrams(sWords.size(), dict, sWords, null /* shortcutMap */);
|
||||||
timeWritingDictToFile(file, dict, VERSION3_WITH_DYNAMIC_UPDATE);
|
timeWritingDictToFile(file, dict, VERSION3_WITH_DYNAMIC_UPDATE);
|
||||||
|
|
||||||
final Ver3DictDecoder dictDecoder = new Ver3DictDecoder(file);
|
final Ver3DictDecoder dictDecoder = new Ver3DictDecoder(file, DictDecoder.USE_BYTEARRAY);
|
||||||
try {
|
try {
|
||||||
dictDecoder.openDictBuffer(
|
dictDecoder.openDictBuffer();
|
||||||
new Ver3DictDecoder.DictionaryBufferFromByteArrayFactory());
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
// ignore
|
// ignore
|
||||||
Log.e(TAG, "IOException while opening the buffer", e);
|
Log.e(TAG, "IOException while opening the buffer", e);
|
||||||
|
|
|
@ -31,7 +31,6 @@ import com.android.inputmethod.latin.utils.CollectionUtils;
|
||||||
|
|
||||||
import java.io.BufferedOutputStream;
|
import java.io.BufferedOutputStream;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -140,23 +139,13 @@ public class BinaryDictIOUtilsTests extends AndroidTestCase {
|
||||||
|
|
||||||
private int getWordPosition(final File file, final String word) {
|
private int getWordPosition(final File file, final String word) {
|
||||||
int position = FormatSpec.NOT_VALID_WORD;
|
int position = FormatSpec.NOT_VALID_WORD;
|
||||||
final Ver3DictDecoder dictDecoder = new Ver3DictDecoder(file);
|
|
||||||
FileInputStream inStream = null;
|
|
||||||
try {
|
try {
|
||||||
inStream = new FileInputStream(file);
|
final Ver3DictDecoder dictDecoder = new Ver3DictDecoder(file);
|
||||||
dictDecoder.openDictBuffer(
|
dictDecoder.openDictBuffer();
|
||||||
new Ver3DictDecoder.DictionaryBufferFromReadOnlyByteBufferFactory());
|
|
||||||
position = BinaryDictIOUtils.getTerminalPosition(dictDecoder, word);
|
position = BinaryDictIOUtils.getTerminalPosition(dictDecoder, word);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
} catch (UnsupportedFormatException e) {
|
} catch (UnsupportedFormatException e) {
|
||||||
} finally {
|
|
||||||
if (inStream != null) {
|
|
||||||
try {
|
|
||||||
inStream.close();
|
|
||||||
} catch (IOException e) {
|
|
||||||
// do nothing
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return position;
|
return position;
|
||||||
}
|
}
|
||||||
|
@ -184,11 +173,10 @@ public class BinaryDictIOUtilsTests extends AndroidTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
private CharGroupInfo findWordFromFile(final File file, final String word) {
|
private CharGroupInfo findWordFromFile(final File file, final String word) {
|
||||||
final Ver3DictDecoder dictDecoder = new Ver3DictDecoder(file);
|
|
||||||
CharGroupInfo info = null;
|
CharGroupInfo info = null;
|
||||||
try {
|
try {
|
||||||
dictDecoder.openDictBuffer(
|
final Ver3DictDecoder dictDecoder = new Ver3DictDecoder(file);
|
||||||
new Ver3DictDecoder.DictionaryBufferFromReadOnlyByteBufferFactory());
|
dictDecoder.openDictBuffer();
|
||||||
info = findWordByBinaryDictReader(dictDecoder, word);
|
info = findWordByBinaryDictReader(dictDecoder, word);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
} catch (UnsupportedFormatException e) {
|
} catch (UnsupportedFormatException e) {
|
||||||
|
@ -200,11 +188,12 @@ public class BinaryDictIOUtilsTests extends AndroidTestCase {
|
||||||
private long insertAndCheckWord(final File file, final String word, final int frequency,
|
private long insertAndCheckWord(final File file, final String word, final int frequency,
|
||||||
final boolean exist, final ArrayList<WeightedString> bigrams,
|
final boolean exist, final ArrayList<WeightedString> bigrams,
|
||||||
final ArrayList<WeightedString> shortcuts) {
|
final ArrayList<WeightedString> shortcuts) {
|
||||||
final Ver3DictDecoder dictDecoder = new Ver3DictDecoder(file);
|
|
||||||
BufferedOutputStream outStream = null;
|
BufferedOutputStream outStream = null;
|
||||||
long amountOfTime = -1;
|
long amountOfTime = -1;
|
||||||
try {
|
try {
|
||||||
dictDecoder.openDictBuffer(new DictionaryBufferFromWritableByteBufferFactory());
|
final Ver3DictDecoder dictDecoder = new Ver3DictDecoder(file,
|
||||||
|
DictDecoder.USE_WRITABLE_BYTEBUFFER);
|
||||||
|
dictDecoder.openDictBuffer();
|
||||||
outStream = new BufferedOutputStream(new FileOutputStream(file, true));
|
outStream = new BufferedOutputStream(new FileOutputStream(file, true));
|
||||||
|
|
||||||
if (!exist) {
|
if (!exist) {
|
||||||
|
@ -234,9 +223,10 @@ public class BinaryDictIOUtilsTests extends AndroidTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void deleteWord(final File file, final String word) {
|
private void deleteWord(final File file, final String word) {
|
||||||
final Ver3DictDecoder dictDecoder = new Ver3DictDecoder(file);
|
|
||||||
try {
|
try {
|
||||||
dictDecoder.openDictBuffer(new DictionaryBufferFromWritableByteBufferFactory());
|
final Ver3DictDecoder dictDecoder = new Ver3DictDecoder(file,
|
||||||
|
DictDecoder.USE_WRITABLE_BYTEBUFFER);
|
||||||
|
dictDecoder.openDictBuffer();
|
||||||
DynamicBinaryDictIOUtils.deleteWord(dictDecoder, word);
|
DynamicBinaryDictIOUtils.deleteWord(dictDecoder, word);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
} catch (UnsupportedFormatException e) {
|
} catch (UnsupportedFormatException e) {
|
||||||
|
@ -244,10 +234,9 @@ public class BinaryDictIOUtilsTests extends AndroidTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkReverseLookup(final File file, final String word, final int position) {
|
private void checkReverseLookup(final File file, final String word, final int position) {
|
||||||
final Ver3DictDecoder dictDecoder = new Ver3DictDecoder(file);
|
|
||||||
try {
|
try {
|
||||||
final DictBuffer dictBuffer = dictDecoder.openAndGetDictBuffer(
|
final Ver3DictDecoder dictDecoder = new Ver3DictDecoder(file);
|
||||||
new Ver3DictDecoder.DictionaryBufferFromReadOnlyByteBufferFactory());
|
|
||||||
final FileHeader fileHeader = dictDecoder.readHeader();
|
final FileHeader fileHeader = dictDecoder.readHeader();
|
||||||
assertEquals(word,
|
assertEquals(word,
|
||||||
BinaryDictDecoderUtils.getWordAtPosition(dictDecoder, fileHeader.mHeaderSize,
|
BinaryDictDecoderUtils.getWordAtPosition(dictDecoder, fileHeader.mHeaderSize,
|
||||||
|
|
|
@ -68,9 +68,9 @@ public class Ver3DictDecoderTests extends AndroidTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
assertNotNull(testFile);
|
assertNotNull(testFile);
|
||||||
final Ver3DictDecoder dictDecoder = new Ver3DictDecoder(testFile);
|
final Ver3DictDecoder dictDecoder = new Ver3DictDecoder(testFile, factory);
|
||||||
try {
|
try {
|
||||||
dictDecoder.openDictBuffer(factory);
|
dictDecoder.openDictBuffer();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Log.e(TAG, "Failed to open the buffer", e);
|
Log.e(TAG, "Failed to open the buffer", e);
|
||||||
}
|
}
|
||||||
|
@ -78,7 +78,7 @@ public class Ver3DictDecoderTests extends AndroidTestCase {
|
||||||
writeDataToFile(testFile);
|
writeDataToFile(testFile);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
dictDecoder.openDictBuffer(factory);
|
dictDecoder.openDictBuffer();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Log.e(TAG, "Raised the exception while opening buffer", e);
|
Log.e(TAG, "Raised the exception while opening buffer", e);
|
||||||
}
|
}
|
||||||
|
@ -110,7 +110,7 @@ public class Ver3DictDecoderTests extends AndroidTestCase {
|
||||||
Log.e(TAG, "IOException while the creating temporary file", e);
|
Log.e(TAG, "IOException while the creating temporary file", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
final Ver3DictDecoder dictDecoder = new Ver3DictDecoder(testFile);
|
final Ver3DictDecoder dictDecoder = new Ver3DictDecoder(testFile, factory);
|
||||||
|
|
||||||
// the default return value of getBuffer() must be null.
|
// the default return value of getBuffer() must be null.
|
||||||
assertNull("the default return value of getBuffer() is not null",
|
assertNull("the default return value of getBuffer() is not null",
|
||||||
|
@ -122,7 +122,7 @@ public class Ver3DictDecoderTests extends AndroidTestCase {
|
||||||
|
|
||||||
DictBuffer dictBuffer = null;
|
DictBuffer dictBuffer = null;
|
||||||
try {
|
try {
|
||||||
dictBuffer = dictDecoder.openAndGetDictBuffer(factory);
|
dictBuffer = dictDecoder.openAndGetDictBuffer();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
Log.e(TAG, "Failed to open and get the buffer", e);
|
Log.e(TAG, "Failed to open and get the buffer", e);
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@ import android.test.AndroidTestCase;
|
||||||
import android.test.suitebuilder.annotation.LargeTest;
|
import android.test.suitebuilder.annotation.LargeTest;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.android.inputmethod.latin.makedict.DictDecoder;
|
||||||
import com.android.inputmethod.latin.makedict.DictEncoder;
|
import com.android.inputmethod.latin.makedict.DictEncoder;
|
||||||
import com.android.inputmethod.latin.makedict.FormatSpec;
|
import com.android.inputmethod.latin.makedict.FormatSpec;
|
||||||
import com.android.inputmethod.latin.makedict.FusionDictionary;
|
import com.android.inputmethod.latin.makedict.FusionDictionary;
|
||||||
|
@ -142,10 +143,9 @@ public class UserHistoryDictIOUtilsTests extends AndroidTestCase
|
||||||
}
|
}
|
||||||
|
|
||||||
private void readDictFromFile(final File file, final OnAddWordListener listener) {
|
private void readDictFromFile(final File file, final OnAddWordListener listener) {
|
||||||
final Ver3DictDecoder dictDecoder = new Ver3DictDecoder(file);
|
final Ver3DictDecoder dictDecoder = new Ver3DictDecoder(file, DictDecoder.USE_BYTEARRAY);
|
||||||
try {
|
try {
|
||||||
dictDecoder.openDictBuffer(
|
dictDecoder.openDictBuffer();
|
||||||
new Ver3DictDecoder.DictionaryBufferFromByteArrayFactory());
|
|
||||||
} catch (FileNotFoundException e) {
|
} catch (FileNotFoundException e) {
|
||||||
Log.e(TAG, "file not found", e);
|
Log.e(TAG, "file not found", e);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
package com.android.inputmethod.latin.dicttool;
|
package com.android.inputmethod.latin.dicttool;
|
||||||
|
|
||||||
import com.android.inputmethod.latin.makedict.BinaryDictDecoderUtils;
|
import com.android.inputmethod.latin.makedict.BinaryDictDecoderUtils;
|
||||||
|
import com.android.inputmethod.latin.makedict.DictDecoder;
|
||||||
import com.android.inputmethod.latin.makedict.FusionDictionary;
|
import com.android.inputmethod.latin.makedict.FusionDictionary;
|
||||||
import com.android.inputmethod.latin.makedict.UnsupportedFormatException;
|
import com.android.inputmethod.latin.makedict.UnsupportedFormatException;
|
||||||
import com.android.inputmethod.latin.makedict.Ver3DictDecoder;
|
import com.android.inputmethod.latin.makedict.Ver3DictDecoder;
|
||||||
|
@ -184,15 +185,14 @@ public final class BinaryDictOffdeviceUtils {
|
||||||
crash(filename, new RuntimeException(
|
crash(filename, new RuntimeException(
|
||||||
filename + " does not seem to be a dictionary file"));
|
filename + " does not seem to be a dictionary file"));
|
||||||
} else {
|
} else {
|
||||||
final Ver3DictDecoder dictDecoder = new Ver3DictDecoder(decodedSpec.mFile);
|
final DictDecoder dictDecoder = new Ver3DictDecoder(decodedSpec.mFile,
|
||||||
dictDecoder.openDictBuffer(
|
DictDecoder.USE_BYTEARRAY);
|
||||||
new Ver3DictDecoder.DictionaryBufferFromByteArrayFactory());
|
|
||||||
if (report) {
|
if (report) {
|
||||||
System.out.println("Format : Binary dictionary format");
|
System.out.println("Format : Binary dictionary format");
|
||||||
System.out.println("Packaging : " + decodedSpec.describeChain());
|
System.out.println("Packaging : " + decodedSpec.describeChain());
|
||||||
System.out.println("Uncompressed size : " + decodedSpec.mFile.length());
|
System.out.println("Uncompressed size : " + decodedSpec.mFile.length());
|
||||||
}
|
}
|
||||||
return BinaryDictDecoderUtils.readDictionaryBinary(dictDecoder, null);
|
return dictDecoder.readDictionaryBinary(null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
package com.android.inputmethod.latin.dicttool;
|
package com.android.inputmethod.latin.dicttool;
|
||||||
|
|
||||||
import com.android.inputmethod.latin.makedict.BinaryDictDecoderUtils;
|
import com.android.inputmethod.latin.makedict.BinaryDictDecoderUtils;
|
||||||
|
import com.android.inputmethod.latin.makedict.DictDecoder;
|
||||||
import com.android.inputmethod.latin.makedict.DictEncoder;
|
import com.android.inputmethod.latin.makedict.DictEncoder;
|
||||||
import com.android.inputmethod.latin.makedict.FormatSpec;
|
import com.android.inputmethod.latin.makedict.FormatSpec;
|
||||||
import com.android.inputmethod.latin.makedict.FusionDictionary;
|
import com.android.inputmethod.latin.makedict.FusionDictionary;
|
||||||
|
@ -266,10 +267,8 @@ public class DictionaryMaker {
|
||||||
private static FusionDictionary readBinaryFile(final String binaryFilename)
|
private static FusionDictionary readBinaryFile(final String binaryFilename)
|
||||||
throws FileNotFoundException, IOException, UnsupportedFormatException {
|
throws FileNotFoundException, IOException, UnsupportedFormatException {
|
||||||
final File file = new File(binaryFilename);
|
final File file = new File(binaryFilename);
|
||||||
final Ver3DictDecoder dictDecoder = new Ver3DictDecoder(file);
|
final DictDecoder dictDecoder = new Ver3DictDecoder(file);
|
||||||
dictDecoder.openDictBuffer(
|
return dictDecoder.readDictionaryBinary(null);
|
||||||
new Ver3DictDecoder.DictionaryBufferFromReadOnlyByteBufferFactory());
|
|
||||||
return BinaryDictDecoderUtils.readDictionaryBinary(dictDecoder, null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
package com.android.inputmethod.latin.dicttool;
|
package com.android.inputmethod.latin.dicttool;
|
||||||
|
|
||||||
import com.android.inputmethod.latin.makedict.BinaryDictDecoderUtils;
|
import com.android.inputmethod.latin.makedict.DictDecoder;
|
||||||
import com.android.inputmethod.latin.makedict.DictEncoder;
|
import com.android.inputmethod.latin.makedict.DictEncoder;
|
||||||
import com.android.inputmethod.latin.makedict.FormatSpec.FormatOptions;
|
import com.android.inputmethod.latin.makedict.FormatSpec.FormatOptions;
|
||||||
import com.android.inputmethod.latin.makedict.FusionDictionary;
|
import com.android.inputmethod.latin.makedict.FusionDictionary;
|
||||||
|
@ -69,10 +69,8 @@ public class BinaryDictOffdeviceUtilsTests extends TestCase {
|
||||||
assertEquals("Wrong decode spec", BinaryDictOffdeviceUtils.COMPRESSION, step);
|
assertEquals("Wrong decode spec", BinaryDictOffdeviceUtils.COMPRESSION, step);
|
||||||
}
|
}
|
||||||
assertEquals("Wrong decode spec", 3, decodeSpec.mDecoderSpec.size());
|
assertEquals("Wrong decode spec", 3, decodeSpec.mDecoderSpec.size());
|
||||||
final Ver3DictDecoder dictDecoder = new Ver3DictDecoder(decodeSpec.mFile);
|
final DictDecoder dictDecoder = new Ver3DictDecoder(decodeSpec.mFile);
|
||||||
dictDecoder.openDictBuffer(
|
final FusionDictionary resultDict = dictDecoder.readDictionaryBinary(
|
||||||
new Ver3DictDecoder.DictionaryBufferFromReadOnlyByteBufferFactory());
|
|
||||||
final FusionDictionary resultDict = BinaryDictDecoderUtils.readDictionaryBinary(dictDecoder,
|
|
||||||
null /* dict : an optional dictionary to add words to, or null */);
|
null /* dict : an optional dictionary to add words to, or null */);
|
||||||
assertEquals("Dictionary can't be read back correctly",
|
assertEquals("Dictionary can't be read back correctly",
|
||||||
FusionDictionary.findWordInTree(resultDict.mRootNodeArray, "foo").getFrequency(),
|
FusionDictionary.findWordInTree(resultDict.mRootNodeArray, "foo").getFrequency(),
|
||||||
|
|
Loading…
Reference in New Issue