FileDocCategorySizeDatePackage
QEncoderStream.javaAPI DocJavaMail 1.4.34314Tue Nov 17 10:38:12 GMT 2009com.sun.mail.util

QEncoderStream

public class QEncoderStream extends QPEncoderStream
This class implements a Q Encoder as defined by RFC 2047 for encoding MIME headers. It subclasses the QPEncoderStream class.
author
John Mani

Fields Summary
private String
specials
private static String
WORD_SPECIALS
private static String
TEXT_SPECIALS
Constructors Summary
public QEncoderStream(OutputStream out, boolean encodingWord)
Create a Q encoder that encodes the specified input stream

param
out the output stream
param
encodingWord true if we are Q-encoding a word within a phrase.


                                     			     
         
	super(out, Integer.MAX_VALUE); // MAX_VALUE is 2^31, should
				       // suffice (!) to indicate that
				       // CRLFs should not be inserted
				       // when encoding rfc822 headers

	// a RFC822 "word" token has more restrictions than a
	// RFC822 "text" token.
	specials = encodingWord ? WORD_SPECIALS : TEXT_SPECIALS;
    
Methods Summary
public static intencodedLength(byte[] b, boolean encodingWord)
Returns the length of the encoded version of this byte array.

	int len = 0;
	String specials = encodingWord ? WORD_SPECIALS: TEXT_SPECIALS;
	for (int i = 0; i < b.length; i++) {
	    int c = b[i] & 0xff; // Mask off MSB
	    if (c < 040 || c >= 0177 || specials.indexOf(c) >= 0)
		// needs encoding
		len += 3; // Q-encoding is 1 -> 3 conversion
	    else
		len++;
	}
	return len;
    
public voidwrite(int c)
Encodes the specified byte to this output stream.

param
c the byte.
exception
IOException if an I/O error occurs.

	c = c & 0xff; // Turn off the MSB.
	if (c == ' ")
	    output('_", false);
	else if (c < 040 || c >= 0177 || specials.indexOf(c) >= 0)
	    // Encoding required. 
	    output(c, true);
	else // No encoding required
	    output(c, false);