View Javadoc
1 package org.apache.commons.net.io; 2 3 /* ==================================================================== 4 * The Apache Software License, Version 1.1 5 * 6 * Copyright (c) 2001 The Apache Software Foundation. All rights 7 * reserved. 8 * 9 * Redistribution and use in source and binary forms, with or without 10 * modification, are permitted provided that the following conditions 11 * are met: 12 * 13 * 1. Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * 16 * 2. Redistributions in binary form must reproduce the above copyright 17 * notice, this list of conditions and the following disclaimer in 18 * the documentation and/or other materials provided with the 19 * distribution. 20 * 21 * 3. The end-user documentation included with the redistribution, 22 * if any, must include the following acknowledgment: 23 * "This product includes software developed by the 24 * Apache Software Foundation (http://www.apache.org/)." 25 * Alternately, this acknowledgment may appear in the software itself, 26 * if and wherever such third-party acknowledgments normally appear. 27 * 28 * 4. The names "Apache" and "Apache Software Foundation" and 29 * "Apache Commons" must not be used to endorse or promote products 30 * derived from this software without prior written permission. For 31 * written permission, please contact apache@apache.org. 32 * 33 * 5. Products derived from this software may not be called "Apache", 34 * nor may "Apache" appear in their name, without 35 * prior written permission of the Apache Software Foundation. 36 * 37 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED 38 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 39 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 40 * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR 41 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 42 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 43 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 44 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 45 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 46 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 47 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 48 * SUCH DAMAGE. 49 * ==================================================================== 50 * 51 * This software consists of voluntary contributions made by many 52 * individuals on behalf of the Apache Software Foundation. For more 53 * information on the Apache Software Foundation, please see 54 * <http://www.apache.org/>;. 55 */ 56 57 import java.io.FilterOutputStream; 58 import java.io.IOException; 59 import java.io.OutputStream; 60 61 /**** 62 * This class wraps an output stream, replacing all occurrences 63 * of <CR><LF> (carriage return followed by a linefeed), 64 * which is the NETASCII standard for representing a newline, with the 65 * local line separator representation. You would use this class to 66 * implement ASCII file transfers requiring conversion from NETASCII. 67 * <p> 68 * Because of the translation process, a call to <code>flush()</code> will 69 * not flush the last byte written if that byte was a carriage 70 * return. A call to <a href="#close"> close() </a>, however, will 71 * flush the carriage return. 72 * <p> 73 * <p> 74 * @author Daniel F. Savarese 75 ***/ 76 77 public final class FromNetASCIIOutputStream extends FilterOutputStream 78 { 79 private boolean __lastWasCR; 80 81 /**** 82 * Creates a FromNetASCIIOutputStream instance that wraps an existing 83 * OutputStream. 84 * <p> 85 * @param output The OutputStream to wrap. 86 ***/ 87 public FromNetASCIIOutputStream(OutputStream output) 88 { 89 super(output); 90 __lastWasCR = false; 91 } 92 93 94 private void __write(int ch) throws IOException 95 { 96 switch (ch) 97 { 98 case '\r': 99 __lastWasCR = true; 100 // Don't write anything. We need to see if next one is linefeed 101 break; 102 case '\n': 103 if (__lastWasCR) 104 { 105 out.write(FromNetASCIIInputStream._lineSeparatorBytes); 106 __lastWasCR = false; 107 break; 108 } 109 __lastWasCR = false; 110 out.write('\n'); 111 break; 112 default: 113 if (__lastWasCR) 114 { 115 out.write('\r'); 116 __lastWasCR = false; 117 } 118 out.write(ch); 119 break; 120 } 121 } 122 123 124 /**** 125 * Writes a byte to the stream. Note that a call to this method 126 * might not actually write a byte to the underlying stream until a 127 * subsequent character is written, from which it can be determined if 128 * a NETASCII line separator was encountered. 129 * This is transparent to the programmer and is only mentioned for 130 * completeness. 131 * <p> 132 * @param ch The byte to write. 133 * @exception IOException If an error occurs while writing to the underlying 134 * stream. 135 ***/ 136 public synchronized void write(int ch) 137 throws IOException 138 { 139 if (FromNetASCIIInputStream._noConversionRequired) 140 { 141 out.write(ch); 142 return ; 143 } 144 145 __write(ch); 146 } 147 148 149 /**** 150 * Writes a byte array to the stream. 151 * <p> 152 * @param buffer The byte array to write. 153 * @exception IOException If an error occurs while writing to the underlying 154 * stream. 155 ***/ 156 public synchronized void write(byte buffer[]) 157 throws IOException 158 { 159 write(buffer, 0, buffer.length); 160 } 161 162 163 /**** 164 * Writes a number of bytes from a byte array to the stream starting from 165 * a given offset. 166 * <p> 167 * @param buffer The byte array to write. 168 * @param offset The offset into the array at which to start copying data. 169 * @param length The number of bytes to write. 170 * @exception IOException If an error occurs while writing to the underlying 171 * stream. 172 ***/ 173 public synchronized void write(byte buffer[], int offset, int length) 174 throws IOException 175 { 176 if (FromNetASCIIInputStream._noConversionRequired) 177 { 178 // FilterOutputStream method is very slow. 179 //super.write(buffer, offset, length); 180 out.write(buffer, offset, length); 181 return ; 182 } 183 184 while (length-- > 0) 185 __write(buffer[offset++]); 186 } 187 188 189 /**** 190 * Closes the stream, writing all pending data. 191 * <p> 192 * @exception IOException If an error occurs while closing the stream. 193 ***/ 194 public synchronized void close() 195 throws IOException 196 { 197 if (FromNetASCIIInputStream._noConversionRequired) 198 { 199 super.close(); 200 return ; 201 } 202 203 if (__lastWasCR) 204 out.write('\r'); 205 super.close(); 206 } 207 }

This page was automatically generated by Maven