Author: toad
Date: 2007-02-16 04:01:09 +0000 (Fri, 16 Feb 2007)
New Revision: 11808

Modified:
   trunk/freenet/src/freenet/node/Node.java
   trunk/freenet/src/freenet/node/PeerManager.java
   trunk/freenet/src/freenet/node/PeerNode.java
   trunk/freenet/src/freenet/node/TestnetHandler.java
   trunk/freenet/src/freenet/support/SimpleFieldSet.java
Log:
Buffer some SimpleFieldSet writes.
Avoid some allocations in SFS.writeTo, at the cost of more write()'s - caller 
MUST buffer at the character level.

Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java    2007-02-16 03:00:13 UTC (rev 
11807)
+++ trunk/freenet/src/freenet/node/Node.java    2007-02-16 04:01:09 UTC (rev 
11808)
@@ -8,6 +8,7 @@

 import java.io.BufferedOutputStream;
 import java.io.BufferedReader;
+import java.io.BufferedWriter;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileInputStream;
@@ -692,12 +693,13 @@

                if(orig.exists()) backup.delete();

-               OutputStreamWriter osr = null;
+               FileOutputStream fos = null;
                try {
-                       FileOutputStream fos = new FileOutputStream(backup);
-                       osr = new OutputStreamWriter(fos);
-                       fs.writeTo(osr);
-                       osr.close();
+                       fos = new FileOutputStream(backup);
+                       OutputStreamWriter osr = new OutputStreamWriter(fos);
+                       BufferedWriter bw = new BufferedWriter(osr);
+                       fs.writeTo(bw);
+                       bw.close();
                        if(!backup.renameTo(orig)) {
                                orig.delete();
                                if(!backup.renameTo(orig)) {
@@ -705,9 +707,9 @@
                                }
                        }
                } catch (IOException e) {
-                       if(osr != null) {
+                       if(fos != null) {
                                try {
-                                       osr.close();
+                                       fos.close();
                                } catch (IOException e1) {
                                        Logger.error(this, "Cannot close 
"+backup+": "+e1, e1);
                                }
@@ -2676,14 +2678,14 @@
                DeflaterOutputStream gis;
                gis = new DeflaterOutputStream(baos);
                OutputStreamWriter osw = new OutputStreamWriter(gis);
+               BufferedWriter bw = new BufferedWriter(osw);
                try {
-                       fs.writeTo(osw);
+                       fs.writeTo(bw);
                } catch (IOException e) {
                        throw new Error(e);
                }
                try {
-                       osw.flush();
-                       gis.close();
+                       bw.close();
                } catch (IOException e1) {
                        throw new Error(e1);
                }
@@ -3449,8 +3451,9 @@
                        // FIXME common pattern, reuse it.
                        BufferedOutputStream bos = new 
BufferedOutputStream(fos);
                        OutputStreamWriter osw = new OutputStreamWriter(bos, 
"UTF-8");
+                       BufferedWriter bw = new BufferedWriter(osw);
                        try {
-                               fs.writeTo(osw);
+                               fs.writeTo(bw);
                        } catch (IOException e) {
                                try {
                                        fos.close();
@@ -3461,7 +3464,7 @@
                                }
                        }
                        try {
-                               osw.close();
+                               bw.close();
                        } catch (IOException e) {
                                // Huh?
                                Logger.error(this, "Caught while closing: "+e, 
e);

Modified: trunk/freenet/src/freenet/node/PeerManager.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerManager.java     2007-02-16 03:00:13 UTC 
(rev 11807)
+++ trunk/freenet/src/freenet/node/PeerManager.java     2007-02-16 04:01:09 UTC 
(rev 11808)
@@ -4,6 +4,7 @@
 package freenet.node;

 import java.io.BufferedReader;
+import java.io.BufferedWriter;
 import java.io.EOFException;
 import java.io.File;
 import java.io.FileInputStream;
@@ -12,6 +13,7 @@
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.OutputStreamWriter;
+import java.io.Writer;
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Vector;
@@ -623,13 +625,14 @@
                 return;
             }
             OutputStreamWriter w = new OutputStreamWriter(fos);
+            BufferedWriter bw = new BufferedWriter(w);
             try {
-               boolean succeeded = writePeers(w);
-                w.close();
+               boolean succeeded = writePeers(bw);
+                bw.close();
                 if(!succeeded) return;
             } catch (IOException e) {
                try {
-                       w.close();
+                       fos.close();
                } catch (IOException e1) {
                        Logger.error(this, "Cannot close peers file: "+e, e);
                }
@@ -646,18 +649,18 @@
         }
     }

-       public boolean writePeers(OutputStreamWriter w) {
+       public boolean writePeers(Writer bw) {
         PeerNode[] peers;
         synchronized (this) {
                        peers = myPeers;
                }
         for (int i = 0; i < peers.length; i++) {
             try {
-                peers[i].write(w);
-                w.flush();
+                peers[i].write(bw);
+                bw.flush();
             } catch (IOException e) {
                 try {
-                    w.close();
+                    bw.close();
                 } catch (IOException e1) {
                     Logger.error(this, "Cannot close file!: " + e1, e1);
                 }

Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java        2007-02-16 03:00:13 UTC 
(rev 11807)
+++ trunk/freenet/src/freenet/node/PeerNode.java        2007-02-16 04:01:09 UTC 
(rev 11808)
@@ -1,6 +1,7 @@
 package freenet.node;

 import java.io.BufferedReader;
+import java.io.BufferedWriter;
 import java.io.ByteArrayInputStream;
 import java.io.EOFException;
 import java.io.File;
@@ -2791,12 +2792,13 @@
                        return -1;
                }
                OutputStreamWriter w = new OutputStreamWriter(fos);
+               BufferedWriter bw = new BufferedWriter(w);
                try {
-                       fs.writeTo(w);
-                       w.close();
+                       fs.writeTo(bw);
+                       bw.close();
                } catch (IOException e) {
                        try {
-                               w.close();
+                               fos.close();
                        } catch (IOException e1) {
                                Logger.error(this, "Cannot close extra peer 
data file: "+e, e);
                        }
@@ -2883,12 +2885,13 @@
                        return false;
                }
                OutputStreamWriter w = new OutputStreamWriter(fos);
+               BufferedWriter bw = new BufferedWriter(w);
                try {
-                       fs.writeTo(w);
-                       w.close();
+                       fs.writeTo(bw);
+                       bw.close();
                } catch (IOException e) {
                        try {
-                               w.close();
+                               fos.close();
                        } catch (IOException e1) {
                                Logger.error(this, "Cannot close extra peer 
data file: "+e, e);
                        }

Modified: trunk/freenet/src/freenet/node/TestnetHandler.java
===================================================================
--- trunk/freenet/src/freenet/node/TestnetHandler.java  2007-02-16 03:00:13 UTC 
(rev 11807)
+++ trunk/freenet/src/freenet/node/TestnetHandler.java  2007-02-16 04:01:09 UTC 
(rev 11808)
@@ -4,6 +4,7 @@
 package freenet.node;

 import java.io.BufferedReader;
+import java.io.BufferedWriter;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
@@ -175,12 +176,13 @@
                                } else if(command.equalsIgnoreCase("PEERS")) {
                                        if(logMINOR) Logger.minor(this, 
"Sending references");
                                        OutputStreamWriter osw = new 
OutputStreamWriter(os, "ISO-8859-1");
-                                       osw.write("My ref:\n\n");
+                                       BufferedWriter bw = new 
BufferedWriter(osw);
+                                       bw.write("My ref:\n\n");
                                        SimpleFieldSet fs = 
node.exportPublicFieldSet();
-                                       fs.writeTo(osw);
-                                       osw.write("\n\nMy peers:\n");
-                                       node.peers.writePeers(osw);
-                                       osw.close();
+                                       fs.writeTo(bw);
+                                       bw.write("\n\nMy peers:\n");
+                                       node.peers.writePeers(bw);
+                                       bw.close();
                                }else {
                                        Logger.error(this, "Unknown testnet 
command: "+command);
                                }

Modified: trunk/freenet/src/freenet/support/SimpleFieldSet.java
===================================================================
--- trunk/freenet/src/freenet/support/SimpleFieldSet.java       2007-02-16 
03:00:13 UTC (rev 11807)
+++ trunk/freenet/src/freenet/support/SimpleFieldSet.java       2007-02-16 
04:01:09 UTC (rev 11808)
@@ -303,18 +303,28 @@

     /**
      * Write the contents of the SimpleFieldSet to a Writer.
-     * @param osr
+     * Note: The caller *must* buffer the writer to avoid lousy performance!
+     * (StringWriter is by definition buffered, otherwise wrap it in a 
BufferedWriter)
      */
        public void writeTo(Writer w) throws IOException {
                writeTo(w, "", false);
        }

+    /**
+     * Write the contents of the SimpleFieldSet to a Writer.
+     * Note: The caller *must* buffer the writer to avoid lousy performance!
+     * (StringWriter is by definition buffered, otherwise wrap it in a 
BufferedWriter)
+     */
     synchronized void writeTo(Writer w, String prefix, boolean noEndMarker) 
throws IOException {
        for(Iterator i = values.entrySet().iterator();i.hasNext();) {
             Map.Entry entry = (Map.Entry) i.next();
             String key = (String) entry.getKey();
             String value = (String) entry.getValue();
-            w.write(prefix+key+ '=' +value+ '\n');
+            w.write(prefix);
+            w.write(key);
+            w.write('=');
+            w.write(value);
+            w.write('\n');
        }
        if(subsets != null) {
                for(Iterator i = subsets.entrySet().iterator();i.hasNext();) {
@@ -328,8 +338,10 @@
        if(!noEndMarker) {
                if(endMarker == null)
                        w.write("End\n");
-               else
-                       w.write(endMarker+ '\n');
+               else {
+                       w.write(endMarker);
+                       w.write('\n');
+               }
        }
     }



Reply via email to