home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1999 April / DPPCPRO0499.ISO / April / Notes / 50b2wic.exe / DATA1.CAB / NotesProgramFilesJavaSupport / rt.jar / sun / io / CharToByteUTF8.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-04-23  |  1.7 KB  |  109 lines

  1. package sun.io;
  2.  
  3. public class CharToByteUTF8 extends CharToByteConverter {
  4.    private char highHalfZoneCode;
  5.  
  6.    public int flush(byte[] var1, int var2, int var3) throws MalformedInputException {
  7.       if (this.highHalfZoneCode != 0) {
  8.          this.highHalfZoneCode = 0;
  9.          super.badInputLength = 0;
  10.          throw new MalformedInputException();
  11.       } else {
  12.          super.byteOff = super.charOff = 0;
  13.          return 0;
  14.       }
  15.    }
  16.  
  17.    public int convert(char[] var1, int var2, int var3, byte[] var4, int var5, int var6) throws ConversionBufferFullException, MalformedInputException {
  18.       byte[] var8 = new byte[6];
  19.       super.charOff = var2;
  20.       super.byteOff = var5;
  21.       if (this.highHalfZoneCode != 0) {
  22.          char var7 = this.highHalfZoneCode;
  23.          this.highHalfZoneCode = 0;
  24.          if (var1[var2] < '\udc00' || var1[var2] > '\udfff') {
  25.             super.badInputLength = 0;
  26.             throw new MalformedInputException();
  27.          }
  28.  
  29.          int var11 = (this.highHalfZoneCode - '\ud800') * 1024 + (var1[var2] - '\udc00') + 65536;
  30.          var4[0] = (byte)(240 | var11 >> 18 & 7);
  31.          var4[1] = (byte)(128 | var11 >> 12 & 63);
  32.          var4[2] = (byte)(128 | var11 >> 6 & 63);
  33.          var4[3] = (byte)(128 | var11 & 63);
  34.          ++super.charOff;
  35.          this.highHalfZoneCode = 0;
  36.       }
  37.  
  38.       while(super.charOff < var3) {
  39.          char var13 = var1[super.charOff];
  40.          byte var9;
  41.          byte var10;
  42.          if (var13 < 128) {
  43.             var8[0] = (byte)var13;
  44.             var9 = 1;
  45.             var10 = 1;
  46.          } else if (var13 < 2048) {
  47.             var8[0] = (byte)(192 | var13 >> 6 & 31);
  48.             var8[1] = (byte)(128 | var13 & 63);
  49.             var9 = 1;
  50.             var10 = 2;
  51.          } else if (var13 >= '\ud800' && var13 <= '\udbff') {
  52.             if (super.charOff + 1 >= var3) {
  53.                this.highHalfZoneCode = var13;
  54.                break;
  55.             }
  56.  
  57.             char var14 = var1[super.charOff + 1];
  58.             if (var14 < '\udc00' || var14 > '\udfff') {
  59.                super.badInputLength = 1;
  60.                throw new MalformedInputException();
  61.             }
  62.  
  63.             int var12 = (var13 - '\ud800') * 1024 + (var14 - '\udc00') + 65536;
  64.             var8[0] = (byte)(240 | var12 >> 18 & 7);
  65.             var8[1] = (byte)(128 | var12 >> 12 & 63);
  66.             var8[2] = (byte)(128 | var12 >> 6 & 63);
  67.             var8[3] = (byte)(128 | var12 & 63);
  68.             var10 = 4;
  69.             var9 = 2;
  70.          } else {
  71.             var8[0] = (byte)(224 | var13 >> 12 & 15);
  72.             var8[1] = (byte)(128 | var13 >> 6 & 63);
  73.             var8[2] = (byte)(128 | var13 & 63);
  74.             var9 = 1;
  75.             var10 = 3;
  76.          }
  77.  
  78.          if (super.byteOff + var10 > var6) {
  79.             throw new ConversionBufferFullException();
  80.          }
  81.  
  82.          for(int var15 = 0; var15 < var10; ++var15) {
  83.             var4[super.byteOff++] = var8[var15];
  84.          }
  85.  
  86.          super.charOff += var9;
  87.       }
  88.  
  89.       return super.byteOff - var5;
  90.    }
  91.  
  92.    public boolean canConvert(char var1) {
  93.       return true;
  94.    }
  95.  
  96.    public int getMaxBytesPerChar() {
  97.       return 3;
  98.    }
  99.  
  100.    public void reset() {
  101.       super.byteOff = super.charOff = 0;
  102.       this.highHalfZoneCode = 0;
  103.    }
  104.  
  105.    public String getCharacterEncoding() {
  106.       return "UTF8";
  107.    }
  108. }
  109.