home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1998 January / PCO0198.ISO / browser / net_linx / java40.jar / sun / io / ByteToCharUTF8.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-11-03  |  1.6 KB  |  136 lines

  1. package sun.io;
  2.  
  3. public class ByteToCharUTF8 extends ByteToCharConverter {
  4.    private int savedSize = 0;
  5.    private byte[] savedBytes = new byte[5];
  6.  
  7.    public int flush(char[] var1, int var2, int var3) throws MalformedInputException {
  8.       if (this.savedSize != 0) {
  9.          this.savedSize = 0;
  10.          super.badInputLength = 0;
  11.          throw new MalformedInputException();
  12.       } else {
  13.          super.byteOff = super.charOff = 0;
  14.          return 0;
  15.       }
  16.    }
  17.  
  18.    public int convert(byte[] var1, int var2, int var3, char[] var4, int var5, int var6) throws MalformedInputException, ConversionBufferFullException {
  19.       char[] var11 = new char[2];
  20.       if (this.savedSize != 0) {
  21.          byte[] var13 = new byte[var3 - var2 + this.savedSize];
  22.  
  23.          for(int var14 = 0; var14 < this.savedSize; ++var14) {
  24.             var13[var14] = this.savedBytes[var14];
  25.          }
  26.  
  27.          System.arraycopy(var1, var2, var13, this.savedSize, var3 - var2);
  28.          var1 = var13;
  29.          var2 = 0;
  30.          var3 = var13.length;
  31.          this.savedSize = 0;
  32.       }
  33.  
  34.       super.charOff = var5;
  35.  
  36.       byte var12;
  37.       for(super.byteOff = var2; super.byteOff < var3; super.charOff += var12) {
  38.          int var18 = super.byteOff;
  39.          int var7 = var1[super.byteOff++] & 255;
  40.          if ((var7 & 128) == 0) {
  41.             var11[0] = (char)var7;
  42.             var12 = 1;
  43.          } else if ((var7 & 224) == 192) {
  44.             if (super.byteOff >= var3) {
  45.                this.savedSize = 1;
  46.                this.savedBytes[0] = (byte)var7;
  47.                break;
  48.             }
  49.  
  50.             int var8 = var1[super.byteOff++] & 255;
  51.             if ((var8 & 192) != 128) {
  52.                super.badInputLength = 2;
  53.                throw new MalformedInputException();
  54.             }
  55.  
  56.             var11[0] = (char)((var7 & 31) << 6 | var8 & 63);
  57.             var12 = 1;
  58.          } else if ((var7 & 240) == 224) {
  59.             if (super.byteOff + 1 >= var3) {
  60.                this.savedBytes[0] = (byte)var7;
  61.                if (super.byteOff >= var3) {
  62.                   this.savedSize = 1;
  63.                } else {
  64.                   this.savedSize = 2;
  65.                   this.savedBytes[1] = var1[super.byteOff];
  66.                }
  67.                break;
  68.             }
  69.  
  70.             int var15 = var1[super.byteOff++] & 255;
  71.             int var9 = var1[super.byteOff++] & 255;
  72.             if ((var15 & 192) != 128 || (var9 & 192) != 128) {
  73.                super.badInputLength = 3;
  74.                throw new MalformedInputException();
  75.             }
  76.  
  77.             var11[0] = (char)((var7 & 15) << 12 | (var15 & 63) << 6 | var9 & 63);
  78.             var12 = 1;
  79.          } else {
  80.             if ((var7 & 248) != 240) {
  81.                super.badInputLength = 1;
  82.                throw new MalformedInputException();
  83.             }
  84.  
  85.             if (super.byteOff + 2 >= var3) {
  86.                this.savedBytes[0] = (byte)var7;
  87.                if (super.byteOff >= var3) {
  88.                   this.savedSize = 1;
  89.                } else if (super.byteOff + 1 >= var3) {
  90.                   this.savedSize = 2;
  91.                   this.savedBytes[1] = var1[super.byteOff];
  92.                } else {
  93.                   this.savedSize = 3;
  94.                   this.savedBytes[1] = var1[super.byteOff];
  95.                   this.savedBytes[2] = var1[super.byteOff + 1];
  96.                }
  97.                break;
  98.             }
  99.  
  100.             int var16 = var1[super.byteOff++] & 255;
  101.             int var17 = var1[super.byteOff++] & 255;
  102.             int var10 = var1[super.byteOff++] & 255;
  103.             if ((var16 & 192) != 128 || (var17 & 192) != 128 || (var10 & 192) != 128) {
  104.                super.badInputLength = 4;
  105.                throw new MalformedInputException();
  106.             }
  107.  
  108.             int var19 = (7 & var7) << 18 | (63 & var16) << 12 | (63 & var17) << 6 | 63 & var10;
  109.             var11[0] = (char)((var19 - 65536) / 1024 + '\ud800');
  110.             var11[1] = (char)((var19 - 65536) % 1024 + '\udc00');
  111.             var12 = 2;
  112.          }
  113.  
  114.          if (super.charOff + var12 > var6) {
  115.             super.byteOff = var18;
  116.             throw new ConversionBufferFullException();
  117.          }
  118.  
  119.          for(int var20 = 0; var20 < var12; ++var20) {
  120.             var4[super.charOff + var20] = var11[var20];
  121.          }
  122.       }
  123.  
  124.       return super.charOff - var5;
  125.    }
  126.  
  127.    public String getCharacterEncoding() {
  128.       return "UTF8";
  129.    }
  130.  
  131.    public void reset() {
  132.       super.byteOff = super.charOff = 0;
  133.       this.savedSize = 0;
  134.    }
  135. }
  136.