This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Patch: java.io.PrintStream


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Am Donnerstag, 19. Juni 2003 15:26 schrieb Mark Wielaard:
> Hi,
>
> On Tue, 2003-06-17 at 17:12, Michael Koch wrote:
>
>         +       * java/io/PrintStream.java
>         +       (lineSeparator): New static member variable.
>
> BufferedWriter always requests System.getProperty("line.separator")
> when needed. But since PrintWriter also already has such a static
> field so I guess that caching this value is OK. If so, then maybe
> BufferedWriter, PrintWriter and PrintStream could share a package
> private static field to store this value?
>
>         +       (print): Call print(String) instead of direct print
> method of the +       Writer Object.
>         +       (println): Call println(String) instead of direct
> println method of the +       Writer Object.
>
> This seems to be slow in the case when you already have a char[].
> In that case you first create a new String object (that makes a
> copy of the whole char[]) and then you finally end up in
> Writer.write(String) that (see comment) turns the String into a new
> copy of the char array. That seems a bit much overhead.

I've revise the patch. Here is the second revision. The subclass 
testcase still does not work as expected.


Michael
- -- 
Homepage: http://www.worldforge.org/
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)

iD8DBQE+8cfyWSOgCCdjSDsRAs48AJ9/9mhUEO6WbVX+1cxroGOyONoqoACfdE3T
UONakYGSsu426GMcLOe1NKI=
=fbW1
-----END PGP SIGNATURE-----
Index: ChangeLog
===================================================================
RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v
retrieving revision 1.1965
diff -u -b -B -r1.1965 ChangeLog
--- ChangeLog	19 Jun 2003 10:48:40 -0000	1.1965
+++ ChangeLog	19 Jun 2003 14:22:13 -0000
@@ -1,5 +1,16 @@
 2003-06-19  Michael Koch  <konqueror@gmx.de>
 
+	* java/io/PrintStream.java
+	(checkError): Call flush() instead of direct flushing of the Writer
+	object.
+	(print): Call print(String) instead of direct print method of the
+	Writer Object.
+	(println): Call println(String) instead of direct println method of the
+	Writer Object.
+	(write): Simplified.
+
+2003-06-19  Michael Koch  <konqueror@gmx.de>
+
 	* java/awt/Font.java
 	javax/swing/UIManager.java
 	javax/swing/border/AbstractBorder.java
Index: java/io/PrintStream.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/io/PrintStream.java,v
retrieving revision 1.20
diff -u -b -B -r1.20 PrintStream.java
--- java/io/PrintStream.java	12 Jun 2003 03:13:14 -0000	1.20
+++ java/io/PrintStream.java	19 Jun 2003 14:22:13 -0000
@@ -58,17 +58,6 @@
  */
 public class PrintStream extends FilterOutputStream
 {
-  /*
-   * This class could easily have been extended to support character
-   * encodings.  In fact, PrintWriter is basically a superset of this
-   * except for the write() methods.  So let's do something tricky
-   * here and just redirect calls in this class to a hidden
-   * PrintWriter instance.  All the functionality goes there since
-   * that is the 'real' class.  The big win of doing this way is that
-   * the default character encoding is done automagicially by the
-   * PrintWriter tree!
-   */
-
   /**
    * This boolean indicates whether or not an error has ever occurred
    * on this stream.
@@ -155,7 +144,7 @@
   public boolean checkError ()
   {
     if (!closed)
-      pw.flush ();
+      flush ();
 
     return error_occurred | pw.checkError ();
   }
@@ -196,7 +185,7 @@
    */
   public void print (boolean bool)
   {
-    pw.print (bool);
+    print (String.valueOf (bool));
   }
 
   /**
@@ -207,7 +196,7 @@
    */
   public void print (int inum)
   {
-    pw.print (inum);
+    print (String.valueOf (inum));
   }
 
   /**
@@ -218,7 +207,7 @@
    */
   public void print (long lnum)
   {
-    pw.print (lnum);
+    print (String.valueOf (lnum));
   }
 
   /**
@@ -229,7 +218,7 @@
    */
   public void print (float fnum)
   {
-    pw.print (fnum);
+    print (String.valueOf (fnum));
   }
 
   /**
@@ -240,7 +229,7 @@
    */
   public void print (double dnum)
   {
-    pw.print (dnum);
+    print (String.valueOf (dnum));
   }
 
   /**
@@ -281,12 +270,7 @@
    */
   public void print (char ch)
   {
-    pw.print (ch);
-
-    if (auto_flush)
-      if ((ch == '\r')
-          || (ch == '\n'))
-        flush ();    
+    print (String.valueOf (ch));
   }
 
   /**
@@ -298,15 +282,6 @@
   public void print (char[] charArray)
   {
     pw.print (charArray);
-
-    if (auto_flush)
-      for (int i = 0; i < charArray.length; i++)
-        if ((charArray [i] == '\r')
-            || (charArray [i] == '\n'))
-          {
-            flush ();
-            break;
-          }
   }
 
   /**
@@ -316,7 +291,7 @@
    */
   public void println ()
   {
-    pw.println ();
+    pw.println();
   }
 
   /**
@@ -330,7 +305,7 @@
    */
   public void println (boolean bool)
   {
-    pw.println (bool);
+    println (String.valueOf (bool));
   }
 
   /**
@@ -343,7 +318,7 @@
    */
   public void println (int inum)
   {
-    pw.println (inum);
+    println (String.valueOf (inum));
   }
 
   /**
@@ -356,7 +331,7 @@
    */
   public void println (long lnum)
   {
-    pw.println (lnum);
+    println (String.valueOf (lnum));
   }
 
   /**
@@ -369,7 +344,7 @@
    */
   public void println (float fnum)
   {
-    pw.println (fnum);
+    println (String.valueOf (fnum));
   }
 
   /**
@@ -382,7 +357,7 @@
    */
   public void println (double dnum)
   {
-    pw.println (dnum);
+    println (String.valueOf (dnum));
   }
 
   /**
@@ -396,7 +371,7 @@
    */
   public void println (Object obj)
   {
-    pw.println (obj);
+    println (String.valueOf (obj));
   }
 
   /**
@@ -422,7 +397,7 @@
    */
   public void println (char ch)
   {
-    pw.println (ch);
+    println (String.valueOf (ch));
   }
 
   /**
@@ -447,21 +422,9 @@
    */
   public void write (int oneByte)
   {
-    // Sigh, we actually have to implement this method. Flush first so that
-    // things get written in the right order.
-    flush ();
-
-    try
-      {
-        out.write (oneByte);
-
-        if (auto_flush && oneByte == '\n')
-          flush ();
-      }
-    catch (IOException e)
-      {
-        setError ();
-      }
+    byte[] data = new byte [1];
+    data [0] = (byte) (oneByte & 0xff);
+    write (data, 0, 1);
   }
 
   /**

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]