home *** CD-ROM | disk | FTP | other *** search
- package sun.io;
-
- public class ByteToCharUnicode extends ByteToCharConverter {
- static final char BYTE_ORDER_MARK = '\ufeff';
- static final char REVERSED_MARK = '\ufffe';
- static final int AUTO = 0;
- static final int BIG = 1;
- static final int LITTLE = 2;
- int byteOrder = 0;
- boolean started = false;
- int leftOverByte;
- boolean leftOver = false;
-
- public String getCharacterEncoding() {
- switch (this.byteOrder) {
- case 1:
- return "UnicodeBig";
- case 2:
- return "UnicodeLittle";
- default:
- return "Unicode";
- }
- }
-
- public int convert(byte[] var1, int var2, int var3, char[] var4, int var5, int var6) throws ConversionBufferFullException, MalformedInputException {
- super.byteOff = var2;
- super.charOff = var5;
- if (var2 >= var3) {
- return 0;
- } else {
- byte var9 = 0;
- int var10 = var2;
- int var11 = var5;
- int var7;
- if (this.leftOver) {
- var7 = this.leftOverByte & 255;
- this.leftOver = false;
- } else {
- var10 = var2 + 1;
- var7 = var1[var2] & 255;
- }
-
- var9 = 1;
- if (!this.started && var10 < var3) {
- int var8 = var1[var10++] & 255;
- var9 = 2;
- char var12 = (char)(var7 << 8 | var8);
- byte var13 = 0;
- if (var12 == '\ufeff') {
- var13 = 1;
- } else if (var12 == '\ufffe') {
- var13 = 2;
- }
-
- if (this.byteOrder == 0) {
- if (var13 == 0) {
- super.badInputLength = var9;
- throw new MalformedInputException("Missing byte-order mark");
- }
-
- this.byteOrder = var13;
- if (var10 < var3) {
- var7 = var1[var10++] & 255;
- var9 = 1;
- }
- } else if (var13 == 0) {
- --var10;
- var9 = 1;
- } else {
- if (this.byteOrder != var13) {
- super.badInputLength = var9;
- throw new MalformedInputException("Incorrect byte-order mark");
- }
-
- if (var10 < var3) {
- var7 = var1[var10++] & 255;
- var9 = 1;
- }
- }
-
- this.started = true;
- }
-
- while(var10 < var3) {
- int var14 = var1[var10++] & 255;
- var9 = 2;
- char var16;
- if (this.byteOrder == 1) {
- var16 = (char)(var7 << 8 | var14);
- } else {
- var16 = (char)(var14 << 8 | var7);
- }
-
- if (var16 == '\ufffe') {
- throw new MalformedInputException("Reversed byte-order mark");
- }
-
- if (var11 >= var6) {
- throw new ConversionBufferFullException();
- }
-
- var4[var11++] = var16;
- super.byteOff = var10;
- super.charOff = var11;
- if (var10 < var3) {
- var7 = var1[var10++] & 255;
- var9 = 1;
- }
- }
-
- if (var9 == 1) {
- this.leftOverByte = var7;
- this.leftOver = true;
- }
-
- return var11 - var5;
- }
- }
-
- public void reset() {
- this.leftOver = false;
- super.byteOff = super.charOff = 0;
- }
-
- public int flush(char[] var1, int var2, int var3) throws MalformedInputException {
- if (this.leftOver) {
- this.reset();
- throw new MalformedInputException();
- } else {
- super.byteOff = super.charOff = 0;
- return 0;
- }
- }
- }
-