sun.misc
public class: UUEncoder [javadoc |
source]
java.lang.Object
sun.misc.CharacterEncoder
sun.misc.UUEncoder
This class implements a Berkeley uu character encoder. This encoder
was made famous by uuencode program.
The basic character coding is algorithmic, taking 6 bits of binary
data and adding it to an ASCII ' ' (space) character. This converts
these six bits into a printable representation. Note that it depends
on the ASCII character encoding standard for english. Groups of three
bytes are converted into 4 characters by treating the three bytes
a four 6 bit groups, group 1 is byte 1's most significant six bits,
group 2 is byte 1's least significant two bits plus byte 2's four
most significant bits. etc.
In this encoding, the buffer prefix is:
begin [mode] [filename]
This is followed by one or more lines of the form:
(len)(data)(data)(data) ...
where (len) is the number of bytes on this line. Note that groupings
are always four characters, even if length is not a multiple of three
bytes. When less than three characters are encoded, the values of the
last remaining bytes is undefined and should be ignored.
The last line of data in a uuencoded file is represented by a single
space character. This is translated by the decoding engine to a line
length of zero. This is immediately followed by a line which contains
the word 'end[newline]'
Methods from sun.misc.CharacterEncoder: |
---|
bytesPerAtom, bytesPerLine, encode, encode, encode, encode, encode, encodeAtom, encodeBuffer, encodeBuffer, encodeBuffer, encodeBuffer, encodeBuffer, encodeBufferPrefix, encodeBufferSuffix, encodeLinePrefix, encodeLineSuffix, readFully |
Methods from java.lang.Object: |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Method from sun.misc.UUEncoder Detail: |
protected int bytesPerAtom() {
return (3);
}
number of bytes per atom in uuencoding is 3 |
protected int bytesPerLine() {
return (45);
}
number of bytes per line in uuencoding is 45 |
protected void encodeAtom(OutputStream outStream,
byte[] data,
int offset,
int len) throws IOException {
byte a, b = 1, c = 1;
int c1, c2, c3, c4;
a = data[offset];
if (len > 1) {
b = data[offset+1];
}
if (len > 2) {
c = data[offset+2];
}
c1 = (a > > > 2) & 0x3f;
c2 = ((a < < 4) & 0x30) | ((b > > > 4) & 0xf);
c3 = ((b < < 2) & 0x3c) | ((c > > > 6) & 0x3);
c4 = c & 0x3f;
outStream.write(c1 + ' ');
outStream.write(c2 + ' ');
outStream.write(c3 + ' ');
outStream.write(c4 + ' ');
return;
}
encodeAtom - take three bytes and encodes them into 4 characters
If len is less than 3 then remaining bytes are filled with '1'.
This insures that the last line won't end in spaces and potentiallly
be truncated. |
protected void encodeBufferPrefix(OutputStream a) throws IOException {
super.pStream = new PrintStream(a);
super.pStream.print("begin "+mode+" ");
if (bufferName != null) {
super.pStream.println(bufferName);
} else {
super.pStream.println("encoder.bin");
}
super.pStream.flush();
}
encodeBufferPrefix writes the begin line to the output stream. |
protected void encodeBufferSuffix(OutputStream a) throws IOException {
super.pStream.println(" \nend");
super.pStream.flush();
}
encodeBufferSuffix writes the single line containing space (' ') and
the line containing the word 'end' to the output stream. |
protected void encodeLinePrefix(OutputStream outStream,
int length) throws IOException {
outStream.write((length & 0x3f) + ' ');
}
Encode the line prefix which consists of the single character. The
lenght is added to the value of ' ' (32 decimal) and printed. |
protected void encodeLineSuffix(OutputStream outStream) throws IOException {
pStream.println();
}
The line suffix for uuencoded files is simply a new line. |