You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2021/03/14 06:38:45 UTC

svn commit: r1887618 - /pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFParser.java

Author: tilman
Date: Sun Mar 14 06:38:45 2021
New Revision: 1887618

URL: http://svn.apache.org/viewvc?rev=1887618&view=rev
Log:
PDFBOX-4892: improve performance, as suggested by valerybokov

Modified:
    pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFParser.java

Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFParser.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFParser.java?rev=1887618&r1=1887617&r2=1887618&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFParser.java (original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFParser.java Sun Mar 14 06:38:45 2021
@@ -119,7 +119,7 @@ public class CFFParser
         stringIndex = readStringIndexData(input);
         byte[][] globalSubrIndex = readIndexData(input);
 
-        List<CFFFont> fonts = new ArrayList<>();
+        List<CFFFont> fonts = new ArrayList<>(nameIndex.length);
         for (int i = 0; i < nameIndex.length; i++)
         {
             CFFFont font = parseFont(input, nameIndex[i], topDictIndex[i]);
@@ -278,7 +278,7 @@ public class CFFParser
             }
             else if (b0 == 30)
             {
-                entry.operands.add(readRealNumber(input, b0));
+                entry.operands.add(readRealNumber(input));
             }
             else if (b0 >= 32 && b0 <= 254)
             {
@@ -338,19 +338,18 @@ public class CFFParser
         }
     }
 
-    /**
-     * @param b0  
-     */
-    private static Double readRealNumber(CFFDataInput input, int b0) throws IOException
+    private static Double readRealNumber(CFFDataInput input) throws IOException
     {
         StringBuilder sb = new StringBuilder();
         boolean done = false;
         boolean exponentMissing = false;
         boolean hasExponent = false;
+        int[] nibbles = new int[2];
         while (!done)
         {
             int b = input.readUnsignedByte();
-            int[] nibbles = { b / 16, b % 16 };
+            nibbles[0] = b / 16;
+            nibbles[1] = b % 16;
             for (int nibble : nibbles)
             {
                 switch (nibble)