home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &n…he Search for Life DVD 2 / DVD-ROM.iso / install / jre1_3 / lib / rt.jar / sun / io / ByteToCharUnicode.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  1.8 KB  |  150 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 originalByteOrder;
  10.    int byteOrder;
  11.    boolean usesMark;
  12.    boolean started = false;
  13.    int leftOverByte;
  14.    boolean leftOver = false;
  15.  
  16.    public ByteToCharUnicode() {
  17.       this.originalByteOrder = this.byteOrder = 0;
  18.       this.usesMark = true;
  19.    }
  20.  
  21.    protected ByteToCharUnicode(int var1, boolean var2) {
  22.       this.originalByteOrder = this.byteOrder = var1;
  23.       this.usesMark = var2;
  24.    }
  25.  
  26.    public String getCharacterEncoding() {
  27.       switch (this.originalByteOrder) {
  28.          case 1:
  29.             return this.usesMark ? "UnicodeBig" : "UnicodeBigUnmarked";
  30.          case 2:
  31.             return this.usesMark ? "UnicodeLittle" : "UnicodeLittleUnmarked";
  32.          default:
  33.             return "Unicode";
  34.       }
  35.    }
  36.  
  37.    public int convert(byte[] var1, int var2, int var3, char[] var4, int var5, int var6) throws ConversionBufferFullException, MalformedInputException {
  38.       super.byteOff = var2;
  39.       super.charOff = var5;
  40.       if (var2 >= var3) {
  41.          return 0;
  42.       } else {
  43.          byte var9 = 0;
  44.          int var10 = var2;
  45.          int var11 = var5;
  46.          int var7;
  47.          if (this.leftOver) {
  48.             var7 = this.leftOverByte & 255;
  49.             this.leftOver = false;
  50.          } else {
  51.             var10 = var2 + 1;
  52.             var7 = var1[var2] & 255;
  53.          }
  54.  
  55.          var9 = 1;
  56.          if (this.usesMark && !this.started && var10 < var3) {
  57.             int var8 = var1[var10++] & 255;
  58.             var9 = 2;
  59.             char var12 = (char)(var7 << 8 | var8);
  60.             byte var13 = 0;
  61.             if (var12 == '\ufeff') {
  62.                var13 = 1;
  63.             } else if (var12 == '\ufffe') {
  64.                var13 = 2;
  65.             }
  66.  
  67.             if (this.byteOrder == 0) {
  68.                if (var13 == 0) {
  69.                   super.badInputLength = var9;
  70.                   throw new MalformedInputException("Missing byte-order mark");
  71.                }
  72.  
  73.                this.byteOrder = var13;
  74.                if (var10 < var3) {
  75.                   var7 = var1[var10++] & 255;
  76.                   var9 = 1;
  77.                }
  78.             } else if (var13 == 0) {
  79.                --var10;
  80.                var9 = 1;
  81.             } else {
  82.                if (this.byteOrder != var13) {
  83.                   super.badInputLength = var9;
  84.                   throw new MalformedInputException("Incorrect byte-order mark");
  85.                }
  86.  
  87.                if (var10 < var3) {
  88.                   var7 = var1[var10++] & 255;
  89.                   var9 = 1;
  90.                }
  91.             }
  92.  
  93.             this.started = true;
  94.          }
  95.  
  96.          while(var10 < var3) {
  97.             int var14 = var1[var10++] & 255;
  98.             var9 = 2;
  99.             char var16;
  100.             if (this.byteOrder == 1) {
  101.                var16 = (char)(var7 << 8 | var14);
  102.             } else {
  103.                var16 = (char)(var14 << 8 | var7);
  104.             }
  105.  
  106.             if (var16 == '\ufffe') {
  107.                throw new MalformedInputException("Reversed byte-order mark");
  108.             }
  109.  
  110.             if (var11 >= var6) {
  111.                throw new ConversionBufferFullException();
  112.             }
  113.  
  114.             var4[var11++] = var16;
  115.             super.byteOff = var10;
  116.             super.charOff = var11;
  117.             if (var10 < var3) {
  118.                var7 = var1[var10++] & 255;
  119.                var9 = 1;
  120.             }
  121.          }
  122.  
  123.          if (var9 == 1) {
  124.             this.leftOverByte = var7;
  125.             super.byteOff = var10;
  126.             this.leftOver = true;
  127.          }
  128.  
  129.          return var11 - var5;
  130.       }
  131.    }
  132.  
  133.    public void reset() {
  134.       this.leftOver = false;
  135.       super.byteOff = super.charOff = 0;
  136.       this.started = false;
  137.       this.byteOrder = this.originalByteOrder;
  138.    }
  139.  
  140.    public int flush(char[] var1, int var2, int var3) throws MalformedInputException {
  141.       if (this.leftOver) {
  142.          this.reset();
  143.          throw new MalformedInputException();
  144.       } else {
  145.          super.byteOff = super.charOff = 0;
  146.          return 0;
  147.       }
  148.    }
  149. }
  150.