home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1999 April / DPPCPRO0499.ISO / April / Notes / 50b2wic.exe / DATA1.CAB / NotesProgramFilesJavaSupport / rt.jar / sun / io / ByteToCharUTF8.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-04-23  |  2.3 KB  |  144 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.       int var13 = 0;
  21.       if (this.savedSize != 0) {
  22.          byte[] var14 = new byte[var3 - var2 + this.savedSize];
  23.  
  24.          for(int var15 = 0; var15 < this.savedSize; ++var15) {
  25.             var14[var15] = this.savedBytes[var15];
  26.          }
  27.  
  28.          System.arraycopy(var1, var2, var14, this.savedSize, var3 - var2);
  29.          var1 = var14;
  30.          var2 = 0;
  31.          var3 = var14.length;
  32.          var13 = -this.savedSize;
  33.          this.savedSize = 0;
  34.       }
  35.  
  36.       super.charOff = var5;
  37.  
  38.       byte var12;
  39.       for(super.byteOff = var2; super.byteOff < var3; super.charOff += var12) {
  40.          int var19 = super.byteOff;
  41.          int var7 = var1[super.byteOff++] & 255;
  42.          if ((var7 & 128) == 0) {
  43.             var11[0] = (char)var7;
  44.             var12 = 1;
  45.          } else if ((var7 & 224) == 192) {
  46.             if (super.byteOff >= var3) {
  47.                this.savedSize = 1;
  48.                this.savedBytes[0] = (byte)var7;
  49.                break;
  50.             }
  51.  
  52.             int var8 = var1[super.byteOff++] & 255;
  53.             if ((var8 & 192) != 128) {
  54.                super.badInputLength = 2;
  55.                super.byteOff += var13;
  56.                throw new MalformedInputException();
  57.             }
  58.  
  59.             var11[0] = (char)((var7 & 31) << 6 | var8 & 63);
  60.             var12 = 1;
  61.          } else if ((var7 & 240) == 224) {
  62.             if (super.byteOff + 1 >= var3) {
  63.                this.savedBytes[0] = (byte)var7;
  64.                if (super.byteOff >= var3) {
  65.                   this.savedSize = 1;
  66.                } else {
  67.                   this.savedSize = 2;
  68.                   this.savedBytes[1] = var1[super.byteOff++];
  69.                }
  70.                break;
  71.             }
  72.  
  73.             int var16 = var1[super.byteOff++] & 255;
  74.             int var9 = var1[super.byteOff++] & 255;
  75.             if ((var16 & 192) != 128 || (var9 & 192) != 128) {
  76.                super.badInputLength = 3;
  77.                super.byteOff += var13;
  78.                throw new MalformedInputException();
  79.             }
  80.  
  81.             var11[0] = (char)((var7 & 15) << 12 | (var16 & 63) << 6 | var9 & 63);
  82.             var12 = 1;
  83.          } else {
  84.             if ((var7 & 248) != 240) {
  85.                super.badInputLength = 1;
  86.                super.byteOff += var13;
  87.                throw new MalformedInputException();
  88.             }
  89.  
  90.             if (super.byteOff + 2 >= var3) {
  91.                this.savedBytes[0] = (byte)var7;
  92.                if (super.byteOff >= var3) {
  93.                   this.savedSize = 1;
  94.                } else if (super.byteOff + 1 >= var3) {
  95.                   this.savedSize = 2;
  96.                   this.savedBytes[1] = var1[super.byteOff++];
  97.                } else {
  98.                   this.savedSize = 3;
  99.                   this.savedBytes[1] = var1[super.byteOff++];
  100.                   this.savedBytes[2] = var1[super.byteOff++];
  101.                }
  102.                break;
  103.             }
  104.  
  105.             int var17 = var1[super.byteOff++] & 255;
  106.             int var18 = var1[super.byteOff++] & 255;
  107.             int var10 = var1[super.byteOff++] & 255;
  108.             if ((var17 & 192) != 128 || (var18 & 192) != 128 || (var10 & 192) != 128) {
  109.                super.badInputLength = 4;
  110.                super.byteOff += var13;
  111.                throw new MalformedInputException();
  112.             }
  113.  
  114.             int var20 = (7 & var7) << 18 | (63 & var17) << 12 | (63 & var18) << 6 | 63 & var10;
  115.             var11[0] = (char)((var20 - 65536) / 1024 + '\ud800');
  116.             var11[1] = (char)((var20 - 65536) % 1024 + '\udc00');
  117.             var12 = 2;
  118.          }
  119.  
  120.          if (super.charOff + var12 > var6) {
  121.             super.byteOff = var19;
  122.             super.byteOff += var13;
  123.             throw new ConversionBufferFullException();
  124.          }
  125.  
  126.          for(int var21 = 0; var21 < var12; ++var21) {
  127.             var4[super.charOff + var21] = var11[var21];
  128.          }
  129.       }
  130.  
  131.       super.byteOff += var13;
  132.       return super.charOff - var5;
  133.    }
  134.  
  135.    public String getCharacterEncoding() {
  136.       return "UTF8";
  137.    }
  138.  
  139.    public void reset() {
  140.       super.byteOff = super.charOff = 0;
  141.       this.savedSize = 0;
  142.    }
  143. }
  144.