Index: src/core/com/itextpdf/text/pdf/PRTokeniser.java
===================================================================
--- src/core/com/itextpdf/text/pdf/PRTokeniser.java	(revision 4482)
+++ src/core/com/itextpdf/text/pdf/PRTokeniser.java	(working copy)
@@ -99,7 +99,7 @@
         false, false, false, false, false, false, false};
     
     static final String EMPTY = "";
-
+    private static final int ZERO_LENGTH = 0;
     
     protected RandomAccessFileOrArray file;
     protected TokenType type;
@@ -107,6 +107,8 @@
     protected int reference;
     protected int generation;
     protected boolean hexString;
+    protected final StringBuilder outBuf = new StringBuilder();
+    protected final StringBuilder buf = new StringBuilder();
        
     public PRTokeniser(String filename) throws IOException {
         file = new RandomAccessFileOrArray(filename);
@@ -149,7 +151,7 @@
     }
     
     public String readString(int size) throws IOException {
-        StringBuffer buf = new StringBuffer();
+        buf.setLength(ZERO_LENGTH);
         int ch;
         while ((size--) > 0) {
             ch = file.read();
@@ -300,7 +302,6 @@
         // Note:  We have to initialize stringValue here, after we've looked for the end of the stream,
         // to ensure that we don't lose the value of a token that might end exactly at the end
         // of the stream
-        StringBuffer outBuf = null;
         stringValue = EMPTY;
 
         switch (ch) {
@@ -312,7 +313,7 @@
                 break;
             case '/':
             {
-                outBuf = new StringBuffer();
+            	outBuf.setLength(ZERO_LENGTH);
                 type = TokenType.NAME;
                 while (true) {
                     ch = file.read();
@@ -339,7 +340,7 @@
                     type = TokenType.START_DIC;
                     break;
                 }
-                outBuf = new StringBuffer();
+                outBuf.setLength(ZERO_LENGTH);
                 type = TokenType.STRING;
                 hexString = true;
                 int v2 = 0;
@@ -378,7 +379,7 @@
                 break;
             case '(':
             {
-                outBuf = new StringBuffer();
+            	outBuf.setLength(ZERO_LENGTH);
                 type = TokenType.STRING;
                 hexString = false;
                 int nesting = 0;
@@ -472,18 +473,18 @@
             }
             default:
             {
-                outBuf = new StringBuffer();
+                outBuf.setLength(ZERO_LENGTH);
                 if (ch == '-' || ch == '+' || ch == '.' || (ch >= '0' && ch <= '9')) {
                     type = TokenType.NUMBER;
                     do {
-                        outBuf.append((char)ch);
+                    	outBuf.append((char)ch);
                         ch = file.read();
                     } while (ch != -1 && ((ch >= '0' && ch <= '9') || ch == '.'));
                 }
                 else {
                     type = TokenType.OTHER;
                     do {
-                        outBuf.append((char)ch);
+                    	outBuf.append((char)ch);
                         ch = file.read();
                     } while (!delims[ch + 1]);
                 }
@@ -491,8 +492,12 @@
                 break;
             }
         }
-        if (outBuf != null)
+        
+        if (outBuf.length() > 0) {
             stringValue = outBuf.toString();
+            outBuf.setLength(ZERO_LENGTH);
+        }
+        
         return true;
     }
     
