CRLFOutputStream.java
上传用户:dinglihq
上传日期:2013-02-04
资源大小:99958k
文件大小:3k
源码类别:

Java编程

开发平台:

Java

  1. /*
  2.  * @(#)CRLFOutputStream.java 1.3 01/05/23
  3.  *
  4.  * Copyright 1997-2000 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * Redistribution and use in source and binary forms, with or without
  7.  * modification, are permitted provided that the following conditions
  8.  * are met:
  9.  * 
  10.  * - Redistributions of source code must retain the above copyright
  11.  *   notice, this list of conditions and the following disclaimer.
  12.  * 
  13.  * - Redistribution in binary form must reproduce the above copyright
  14.  *   notice, this list of conditions and the following disclaimer in the
  15.  *   documentation and/or other materials provided with the distribution.
  16.  * 
  17.  * Neither the name of Sun Microsystems, Inc. or the names of contributors
  18.  * may be used to endorse or promote products derived from this software
  19.  * without specific prior written permission.
  20.  * 
  21.  * This software is provided "AS IS," without a warranty of any kind. ALL
  22.  * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
  23.  * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
  24.  * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND
  25.  * ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES OR LIABILITIES
  26.  * SUFFERED BY LICENSEE AS A RESULT OF  OR RELATING TO USE, MODIFICATION
  27.  * OR DISTRIBUTION OF THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
  28.  * SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR
  29.  * FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
  30.  * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
  31.  * ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS
  32.  * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  33.  * 
  34.  * You acknowledge that Software is not designed, licensed or intended
  35.  * for use in the design, construction, operation or maintenance of any
  36.  * nuclear facility.
  37.  */
  38. import java.io.*;
  39. /**
  40.  * Convert lines into the canonical MIME format, that is,
  41.  * terminate lines with CRLF. <p>
  42.  *
  43.  * This stream can be used with the Part.writeTo and Message.writeTo
  44.  * methods to generate the canonical MIME format of the data for the
  45.  * purpose of (e.g.) sending it via SMTP or computing a digital
  46.  * signature.
  47.  */
  48. public class CRLFOutputStream extends FilterOutputStream {
  49.     protected int lastb = -1;
  50.     protected static byte[] newline;
  51.     static {
  52. newline = new byte[2];
  53. newline[0] = (byte)'r';
  54. newline[1] = (byte)'n';
  55.     }
  56.     public CRLFOutputStream(OutputStream os) {
  57. super(os);
  58.     }
  59.     public void write(int b) throws IOException {
  60. if (b == 'r') {
  61.     out.write(newline);
  62. } else if (b == 'n') {
  63.     if (lastb != 'r')
  64. out.write(newline);
  65. } else {
  66.     out.write(b);
  67. }
  68. lastb = b;
  69.     }
  70.     public void write(byte b[]) throws IOException {
  71. write(b, 0, b.length);
  72.     }
  73.     public void write(byte b[], int off, int len) throws IOException {
  74. int start = off;
  75. len += off;
  76. for (int i = start; i < len ; i++) {
  77.     if (b[i] == 'r') {
  78. out.write(b, start, i - start);
  79. out.write(newline);
  80. start = i + 1;
  81.     } else if (b[i] == 'n') {
  82. if (lastb != 'r') {
  83.     out.write(b, start, i - start);
  84.     out.write(newline);
  85. }
  86. start = i + 1;
  87.     }
  88.     lastb = b[i];
  89. }
  90. if ((len - start) > 0)
  91.     out.write(b, start, len - start);
  92.     }
  93. }