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

  1. package sun.io;
  2.  
  3. public class ByteToCharUnicode extends ByteToCharConverter {
  4.    static final char BYTE_ORDER_MARK = '\ufeff';
  5.    static final char REVERSED_MARK = '\ufffe';
  6.    static final int AUTO = 0;
  7.    static final int BIG = 1;
  8.    static final int LITTLE = 2;
  9.    int byteOrder = 0;
  10.    boolean started = false;
  11.    int leftOverByte;
  12.    boolean leftOver = false;
  13.  
  14.    public String getCharacterEncoding() {
  15.       switch (this.byteOrder) {
  16.          case 1:
  17.             return "UnicodeBig";
  18.          case 2:
  19.             return "UnicodeLittle";
  20.          default:
  21.             return "Unicode";
  22.       }
  23.    }
  24.  
  25.    public int convert(byte[] var1, int var2, int var3, char[] var4, int var5, int var6) throws ConversionBufferFullException, MalformedInputException {
  26.       super.byteOff = var2;
  27.       super.charOff = var5;
  28.       if (var2 >= var3) {
  29.          return 0;
  30.       } else {
  31.          byte var9 = 0;
  32.          int var10 = var2;
  33.          int var11 = var5;
  34.          int var7;
  35.          if (this.leftOver) {
  36.             var7 = this.leftOverByte & 255;
  37.             this.leftOver = false;
  38.          } else {
  39.             var10 = var2 + 1;
  40.             var7 = var1[var2] & 255;
  41.          }
  42.  
  43.          var9 = 1;
  44.          if (!this.started && var10 < var3) {
  45.             int var8 = var1[var10++] & 255;
  46.             var9 = 2;
  47.             char var12 = (char)(var7 << 8 | var8);
  48.             byte var13 = 0;
  49.             if (var12 == '\ufeff') {
  50.                var13 = 1;
  51.             } else if (var12 == '\ufffe') {
  52.                var13 = 2;
  53.             }
  54.  
  55.             if (this.byteOrder == 0) {
  56.                if (var13 == 0) {
  57.                   super.badInputLength = var9;
  58.                   throw new MalformedInputException("Missing byte-order mark");
  59.                }
  60.  
  61.                this.byteOrder = var13;
  62.                if (var10 < var3) {
  63.                   var7 = var1[var10++] & 255;
  64.                   var9 = 1;
  65.                }
  66.             } else if (var13 == 0) {
  67.                --var10;
  68.                var9 = 1;
  69.             } else {
  70.                if (this.byteOrder != var13) {
  71.                   super.badInputLength = var9;
  72.                   throw new MalformedInputException("Incorrect byte-order mark");
  73.                }
  74.  
  75.                if (var10 < var3) {
  76.                   var7 = var1[var10++] & 255;
  77.                   var9 = 1;
  78.                }
  79.             }
  80.  
  81.             this.started = true;
  82.          }
  83.  
  84.          while(var10 < var3) {
  85.             int var14 = var1[var10++] & 255;
  86.             var9 = 2;
  87.             char var16;
  88.             if (this.byteOrder == 1) {
  89.                var16 = (char)(var7 << 8 | var14);
  90.             } else {
  91.                var16 = (char)(var14 << 8 | var7);
  92.             }
  93.  
  94.             if (var16 == '\ufffe') {
  95.                throw new MalformedInputException("Reversed byte-order mark");
  96.             }
  97.  
  98.             if (var11 >= var6) {
  99.                throw new ConversionBufferFullException();
  100.             }
  101.  
  102.             var4[var11++] = var16;
  103.             super.byteOff = var10;
  104.             super.charOff = var11;
  105.             if (var10 < var3) {
  106.                var7 = var1[var10++] & 255;
  107.                var9 = 1;
  108.             }
  109.          }
  110.  
  111.          if (var9 == 1) {
  112.             this.leftOverByte = var7;
  113.             this.leftOver = true;
  114.          }
  115.  
  116.          return var11 - var5;
  117.       }
  118.    }
  119.  
  120.    public void reset() {
  121.       this.leftOver = false;
  122.       super.byteOff = super.charOff = 0;
  123.    }
  124.  
  125.    public int flush(char[] var1, int var2, int var3) throws MalformedInputException {
  126.       if (this.leftOver) {
  127.          this.reset();
  128.          throw new MalformedInputException();
  129.       } else {
  130.          super.byteOff = super.charOff = 0;
  131.          return 0;
  132.       }
  133.    }
  134. }
  135.