Mega Code Archive

 
Categories / Java / Email
 

Convert the various newline conventions to the local platforms newline convention

/*  * @(#)NewlineOutputStream.java 1.3 01/05/23  *  * Copyright 1997-2000 Sun Microsystems, Inc. All Rights Reserved.  *  * Redistribution and use in source and binary forms, with or without  * modification, are permitted provided that the following conditions  * are met:  *   * - Redistributions of source code must retain the above copyright  *   notice, this list of conditions and the following disclaimer.  *   * - Redistribution in binary form must reproduce the above copyright  *   notice, this list of conditions and the following disclaimer in the  *   documentation and/or other materials provided with the distribution.  *   * Neither the name of Sun Microsystems, Inc. or the names of contributors  * may be used to endorse or promote products derived from this software  * without specific prior written permission.  *   * This software is provided "AS IS," without a warranty of any kind. ALL  * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,  * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A  * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND  * ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES OR LIABILITIES  * SUFFERED BY LICENSEE AS A RESULT OF  OR RELATING TO USE, MODIFICATION  * OR DISTRIBUTION OF THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL  * SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR  * FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE  * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,  * ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS  * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.  *   * You acknowledge that Software is not designed, licensed or intended  * for use in the design, construction, operation or maintenance of any  * nuclear facility.  */ import java.io.FilterOutputStream; import java.io.IOException; import java.io.OutputStream; /**  * Convert the various newline conventions to the local platform's newline  * convention.  * <p>  *   * This stream can be used with the Message.writeTo method to generate a message  * that uses the local plaform's line terminator for the purpose of (e.g.)  * saving the message to a local file.  */ public class NewlineOutputStream extends FilterOutputStream {   private int lastb = -1;   private static byte[] newline;   public NewlineOutputStream(OutputStream os) {     super(os);     if (newline == null) {       String s = System.getProperty("line.separator");       if (s == null || s.length() <= 0)         s = "\n";       newline = new byte[s.length()];       s.getBytes(0, s.length(), newline, 0);     }   }   public void write(int b) throws IOException {     if (b == '\r') {       out.write(newline);     } else if (b == '\n') {       if (lastb != '\r')         out.write(newline);     } else {       out.write(b);     }     lastb = b;   }   public void write(byte b[]) throws IOException {     write(b, 0, b.length);   }   public void write(byte b[], int off, int len) throws IOException {     for (int i = 0; i < len; i++) {       write(b[off + i]);     }   } }