X-Git-Url: http://gitweb.fperrin.net/?a=blobdiff_plain;f=src%2Fcom%2Fhughes%2Fandroid%2Fdictionary%2Fengine%2FPairEntry.java;h=2fac99f75201f0d73f73aa7f83ee536b10c95c9a;hb=3ce0dd16e69302365d3bc802f298a5388b293d86;hp=305f034d2875c2b0bf568374b57e090b9f217785;hpb=52c9c869487c299412524d5bd3519d6ef19d0b55;p=Dictionary.git diff --git a/src/com/hughes/android/dictionary/engine/PairEntry.java b/src/com/hughes/android/dictionary/engine/PairEntry.java index 305f034..2fac99f 100644 --- a/src/com/hughes/android/dictionary/engine/PairEntry.java +++ b/src/com/hughes/android/dictionary/engine/PairEntry.java @@ -14,8 +14,10 @@ package com.hughes.android.dictionary.engine; +import android.support.annotation.NonNull; + import com.hughes.util.StringUtil; -import com.hughes.util.raf.RAFListSerializer; +import com.hughes.util.raf.RAFListSerializerSkippable; import com.hughes.util.raf.RAFSerializable; import com.ibm.icu.text.Transliterator; @@ -24,6 +26,7 @@ import java.io.DataOutput; import java.io.IOException; import java.io.PrintStream; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.regex.Pattern; @@ -34,7 +37,7 @@ public class PairEntry extends AbstractEntry implements RAFSerializable(1); + pairs = new ArrayList<>(1); } public PairEntry(final EntrySource entrySource, final String lang1, final String lang2) { @@ -46,9 +49,14 @@ public class PairEntry extends AbstractEntry implements RAFSerializable= 7 ? StringUtil.readVarInt(raf) : raf.readInt(); - pairs = new ArrayList(size); - for (int i = 0; i < size; ++i) { - pairs.add(new Pair(raf.readUTF(), raf.readUTF())); + // Use singletonList for better performance in common case + if (size == 1) pairs = Collections.singletonList(new Pair(raf.readUTF(), raf.readUTF())); + else + { + pairs = new ArrayList<>(size); + for (int i = 0; i < size; ++i) { + pairs.add(new Pair(raf.readUTF(), raf.readUTF())); + } } } @@ -63,7 +71,7 @@ public class PairEntry extends AbstractEntry implements RAFSerializable { + static final class Serializer implements RAFListSerializerSkippable { final Dictionary dictionary; @@ -76,6 +84,25 @@ public class PairEntry extends AbstractEntry implements RAFSerializable= 7) + { + StringUtil.readVarInt(raf); + size = StringUtil.readVarInt(raf); + } + else + { + raf.skipBytes(2); + size = raf.readInt(); + } + for (int i = 0; i < 2*size; ++i) { + int l = raf.readUnsignedShort(); + raf.skipBytes(l); + } + } + @Override public void write(DataOutput raf, PairEntry t) throws IOException { t.write(raf); @@ -172,7 +199,7 @@ public class PairEntry extends AbstractEntry implements RAFSerializable