OSDN Git Service

Clean up Hyphenator file reading
authorRaph Levien <raph@google.com>
Mon, 6 Jul 2015 16:01:36 +0000 (09:01 -0700)
committerRaph Levien <raph@google.com>
Mon, 6 Jul 2015 16:01:36 +0000 (09:01 -0700)
The old code made invalid assumptions about read() behavior and
failed to clean up properly in case of error. This patch changes the
file reading to use IoUtils.readFileAsString, which handles that.

Bug: 21020457
Change-Id: If9b54955c20a20a4ed5e8381d0c7e9c920d0639a

core/java/android/text/Hyphenator.java

index 67c36e3..1ee3827 100644 (file)
@@ -21,9 +21,10 @@ import com.android.internal.annotations.GuardedBy;
 import android.annotation.Nullable;
 import android.util.Log;
 
+import libcore.io.IoUtils;
+
 import java.io.File;
 import java.io.IOException;
-import java.io.RandomAccessFile;
 import java.util.HashMap;
 import java.util.Locale;
 
@@ -42,9 +43,9 @@ public class Hyphenator {
     private final static Object sLock = new Object();
 
     @GuardedBy("sLock")
-    static HashMap<Locale, Hyphenator> sMap = new HashMap<Locale, Hyphenator>();
+    final static HashMap<Locale, Hyphenator> sMap = new HashMap<Locale, Hyphenator>();
 
-    private long mNativePtr;
+    final private long mNativePtr;
 
     private Hyphenator(long nativePtr) {
         mNativePtr = nativePtr;
@@ -90,17 +91,13 @@ public class Hyphenator {
         String patternFilename = "hyph-"+languageTag.toLowerCase(Locale.US)+".pat.txt";
         File patternFile = new File(getSystemHyphenatorLocation(), patternFilename);
         try {
-            RandomAccessFile rf = new RandomAccessFile(patternFile, "r");
-            byte[] buf = new byte[(int)rf.length()];
-            rf.read(buf);
-            rf.close();
-            String patternData = new String(buf);
+            String patternData = IoUtils.readFileAsString(patternFile.getAbsolutePath());
             long nativePtr = StaticLayout.nLoadHyphenator(patternData);
             return new Hyphenator(nativePtr);
         } catch (IOException e) {
             Log.e(TAG, "error loading hyphenation " + patternFile, e);
+            return null;
         }
-        return null;
     }
 
     private static File getSystemHyphenatorLocation() {