Mega Code Archive

 
Categories / Java / Email
 

Convert lines into the canonical MIME format, that is, terminate lines with CRLF

/*  * @(#)CRLFOutputStream.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 lines into the canonical MIME format, that is, terminate lines with  * CRLF.  * <p>  *   * This stream can be used with the Part.writeTo and Message.writeTo methods to  * generate the canonical MIME format of the data for the purpose of (e.g.)  * sending it via SMTP or computing a digital signature.  */ public class CRLFOutputStream extends FilterOutputStream {   protected int lastb = -1;   protected static byte[] newline;   static {     newline = new byte[2];     newline[0] = (byte) '\r';     newline[1] = (byte) '\n';   }   public CRLFOutputStream(OutputStream os) {     super(os);   }   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 {     int start = off;     len += off;     for (int i = start; i < len; i++) {       if (b[i] == '\r') {         out.write(b, start, i - start);         out.write(newline);         start = i + 1;       } else if (b[i] == '\n') {         if (lastb != '\r') {           out.write(b, start, i - start);           out.write(newline);         }         start = i + 1;       }       lastb = b[i];     }     if ((len - start) > 0)       out.write(b, start, len - start);   } }