home *** CD-ROM | disk | FTP | other *** search
- package sun.io;
-
- public class ByteToCharUTF8 extends ByteToCharConverter {
- private int savedSize = 0;
- private byte[] savedBytes = new byte[5];
-
- public int flush(char[] var1, int var2, int var3) throws MalformedInputException {
- if (this.savedSize != 0) {
- this.savedSize = 0;
- super.badInputLength = 0;
- throw new MalformedInputException();
- } else {
- super.byteOff = super.charOff = 0;
- return 0;
- }
- }
-
- public int convert(byte[] var1, int var2, int var3, char[] var4, int var5, int var6) throws MalformedInputException, ConversionBufferFullException {
- char[] var11 = new char[2];
- int var13 = 0;
- if (this.savedSize != 0) {
- byte[] var14 = new byte[var3 - var2 + this.savedSize];
-
- for(int var15 = 0; var15 < this.savedSize; ++var15) {
- var14[var15] = this.savedBytes[var15];
- }
-
- System.arraycopy(var1, var2, var14, this.savedSize, var3 - var2);
- var1 = var14;
- var2 = 0;
- var3 = var14.length;
- var13 = -this.savedSize;
- this.savedSize = 0;
- }
-
- super.charOff = var5;
-
- byte var12;
- for(super.byteOff = var2; super.byteOff < var3; super.charOff += var12) {
- int var19 = super.byteOff;
- int var7 = var1[super.byteOff++] & 255;
- if ((var7 & 128) == 0) {
- var11[0] = (char)var7;
- var12 = 1;
- } else if ((var7 & 224) == 192) {
- if (super.byteOff >= var3) {
- this.savedSize = 1;
- this.savedBytes[0] = (byte)var7;
- break;
- }
-
- int var8 = var1[super.byteOff++] & 255;
- if ((var8 & 192) != 128) {
- super.badInputLength = 2;
- super.byteOff += var13;
- throw new MalformedInputException();
- }
-
- var11[0] = (char)((var7 & 31) << 6 | var8 & 63);
- var12 = 1;
- } else if ((var7 & 240) == 224) {
- if (super.byteOff + 1 >= var3) {
- this.savedBytes[0] = (byte)var7;
- if (super.byteOff >= var3) {
- this.savedSize = 1;
- } else {
- this.savedSize = 2;
- this.savedBytes[1] = var1[super.byteOff++];
- }
- break;
- }
-
- int var16 = var1[super.byteOff++] & 255;
- int var9 = var1[super.byteOff++] & 255;
- if ((var16 & 192) != 128 || (var9 & 192) != 128) {
- super.badInputLength = 3;
- super.byteOff += var13;
- throw new MalformedInputException();
- }
-
- var11[0] = (char)((var7 & 15) << 12 | (var16 & 63) << 6 | var9 & 63);
- var12 = 1;
- } else {
- if ((var7 & 248) != 240) {
- super.badInputLength = 1;
- super.byteOff += var13;
- throw new MalformedInputException();
- }
-
- if (super.byteOff + 2 >= var3) {
- this.savedBytes[0] = (byte)var7;
- if (super.byteOff >= var3) {
- this.savedSize = 1;
- } else if (super.byteOff + 1 >= var3) {
- this.savedSize = 2;
- this.savedBytes[1] = var1[super.byteOff++];
- } else {
- this.savedSize = 3;
- this.savedBytes[1] = var1[super.byteOff++];
- this.savedBytes[2] = var1[super.byteOff++];
- }
- break;
- }
-
- int var17 = var1[super.byteOff++] & 255;
- int var18 = var1[super.byteOff++] & 255;
- int var10 = var1[super.byteOff++] & 255;
- if ((var17 & 192) != 128 || (var18 & 192) != 128 || (var10 & 192) != 128) {
- super.badInputLength = 4;
- super.byteOff += var13;
- throw new MalformedInputException();
- }
-
- int var20 = (7 & var7) << 18 | (63 & var17) << 12 | (63 & var18) << 6 | 63 & var10;
- var11[0] = (char)((var20 - 65536) / 1024 + '\ud800');
- var11[1] = (char)((var20 - 65536) % 1024 + '\udc00');
- var12 = 2;
- }
-
- if (super.charOff + var12 > var6) {
- super.byteOff = var19;
- super.byteOff += var13;
- throw new ConversionBufferFullException();
- }
-
- for(int var21 = 0; var21 < var12; ++var21) {
- var4[super.charOff + var21] = var11[var21];
- }
- }
-
- super.byteOff += var13;
- return super.charOff - var5;
- }
-
- public String getCharacterEncoding() {
- return "UTF8";
- }
-
- public void reset() {
- super.byteOff = super.charOff = 0;
- this.savedSize = 0;
- }
- }
-