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];
- if (this.savedSize != 0) {
- byte[] var13 = new byte[var3 - var2 + this.savedSize];
-
- for(int var14 = 0; var14 < this.savedSize; ++var14) {
- var13[var14] = this.savedBytes[var14];
- }
-
- System.arraycopy(var1, var2, var13, this.savedSize, var3 - var2);
- var1 = var13;
- var2 = 0;
- var3 = var13.length;
- this.savedSize = 0;
- }
-
- super.charOff = var5;
-
- byte var12;
- for(super.byteOff = var2; super.byteOff < var3; super.charOff += var12) {
- int var18 = 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;
- 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 var15 = var1[super.byteOff++] & 255;
- int var9 = var1[super.byteOff++] & 255;
- if ((var15 & 192) != 128 || (var9 & 192) != 128) {
- super.badInputLength = 3;
- throw new MalformedInputException();
- }
-
- var11[0] = (char)((var7 & 15) << 12 | (var15 & 63) << 6 | var9 & 63);
- var12 = 1;
- } else {
- if ((var7 & 248) != 240) {
- super.badInputLength = 1;
- 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 + 1];
- }
- break;
- }
-
- int var16 = var1[super.byteOff++] & 255;
- int var17 = var1[super.byteOff++] & 255;
- int var10 = var1[super.byteOff++] & 255;
- if ((var16 & 192) != 128 || (var17 & 192) != 128 || (var10 & 192) != 128) {
- super.badInputLength = 4;
- throw new MalformedInputException();
- }
-
- int var19 = (7 & var7) << 18 | (63 & var16) << 12 | (63 & var17) << 6 | 63 & var10;
- var11[0] = (char)((var19 - 65536) / 1024 + '\ud800');
- var11[1] = (char)((var19 - 65536) % 1024 + '\udc00');
- var12 = 2;
- }
-
- if (super.charOff + var12 > var6) {
- super.byteOff = var18;
- throw new ConversionBufferFullException();
- }
-
- for(int var20 = 0; var20 < var12; ++var20) {
- var4[super.charOff + var20] = var11[var20];
- }
- }
-
- return super.charOff - var5;
- }
-
- public String getCharacterEncoding() {
- return "UTF8";
- }
-
- public void reset() {
- super.byteOff = super.charOff = 0;
- this.savedSize = 0;
- }
- }
-