Subversion Repositories javautils

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved.
  3.  *
  4.  * Redistribution and use in source and binary forms, with or without
  5.  * modification, are permitted provided that the following conditions
  6.  * are met:
  7.  *
  8.  *   - Redistributions of source code must retain the above copyright
  9.  *     notice, this list of conditions and the following disclaimer.
  10.  *
  11.  *   - Redistributions in binary form must reproduce the above copyright
  12.  *     notice, this list of conditions and the following disclaimer in the
  13.  *     documentation and/or other materials provided with the distribution.
  14.  *
  15.  *   - Neither the name of Sun Microsystems nor the names of its
  16.  *     contributors may be used to endorse or promote products derived
  17.  *     from this software without specific prior written permission.
  18.  *
  19.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
  20.  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
  21.  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  22.  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
  23.  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  24.  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  25.  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  26.  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  27.  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  28.  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  29.  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  30.  */
  31.  
  32. import java.io.*;
  33.  
  34. /**
  35.  * Convert the various newline conventions to the local platform's
  36.  * newline convention. <p>
  37.  *
  38.  * This stream can be used with the Message.writeTo method to
  39.  * generate a message that uses the local plaform's line terminator
  40.  * for the purpose of (e.g.) saving the message to a local file.
  41.  */
  42. public class NewlineOutputStream extends FilterOutputStream {
  43.     private int lastb = -1;
  44.     private static byte[] newline;
  45.  
  46.     public NewlineOutputStream(OutputStream os) {
  47.         super(os);
  48.         if (newline == null) {
  49.             String s = System.getProperty("line.separator");
  50.             if (s == null || s.length() <= 0)
  51.                 s = "\n";
  52.             newline = new byte[s.length()];
  53.             s.getBytes(0, s.length(), newline, 0);
  54.         }
  55.     }
  56.  
  57.     public void write(int b) throws IOException {
  58.         if (b == '\r') {
  59.             out.write(newline);
  60.         } else if (b == '\n') {
  61.             if (lastb != '\r')
  62.                 out.write(newline);
  63.         } else {
  64.             out.write(b);
  65.         }
  66.         lastb = b;
  67.     }
  68.  
  69.     public void write(byte b[]) throws IOException {
  70.         write(b, 0, b.length);
  71.     }
  72.  
  73.     public void write(byte b[], int off, int len) throws IOException {
  74.         for (int i = 0 ; i < len ; i++) {
  75.             write(b[off + i]);
  76.         }
  77.     }
  78. }
  79.