src/java.base/share/classes/sun/nio/cs/ISO_8859_1.java
changeset 48262 daf3b49f4839
parent 47216 71c04702a3d5
child 49443 e5679a6661d6
equal deleted inserted replaced
48261:43edfde828ab 48262:daf3b49f4839
    61 
    61 
    62     public CharsetEncoder newEncoder() {
    62     public CharsetEncoder newEncoder() {
    63         return new Encoder(this);
    63         return new Encoder(this);
    64     }
    64     }
    65 
    65 
    66     private static class Decoder extends CharsetDecoder
    66     private static class Decoder extends CharsetDecoder {
    67                                  implements ArrayDecoder {
    67 
    68         private Decoder(Charset cs) {
    68         private Decoder(Charset cs) {
    69             super(cs, 1.0f, 1.0f);
    69             super(cs, 1.0f, 1.0f);
    70         }
    70         }
    71 
    71 
    72         private CoderResult decodeArrayLoop(ByteBuffer src,
    72         private CoderResult decodeArrayLoop(ByteBuffer src,
   122             if (src.hasArray() && dst.hasArray())
   122             if (src.hasArray() && dst.hasArray())
   123                 return decodeArrayLoop(src, dst);
   123                 return decodeArrayLoop(src, dst);
   124             else
   124             else
   125                 return decodeBufferLoop(src, dst);
   125                 return decodeBufferLoop(src, dst);
   126         }
   126         }
   127 
   127     }
   128         public int decode(byte[] src, int sp, int len, char[] dst) {
   128 
   129             if (len > dst.length)
   129     private static class Encoder extends CharsetEncoder {
   130                 len = dst.length;
   130 
   131             int dp = 0;
       
   132             while (dp < len)
       
   133                 dst[dp++] = (char)(src[sp++] & 0xff);
       
   134             return dp;
       
   135         }
       
   136 
       
   137         public boolean isASCIICompatible() {
       
   138             return true;
       
   139         }
       
   140     }
       
   141 
       
   142     private static class Encoder extends CharsetEncoder
       
   143                                  implements ArrayEncoder {
       
   144         private Encoder(Charset cs) {
   131         private Encoder(Charset cs) {
   145             super(cs, 1.0f, 1.0f);
   132             super(cs, 1.0f, 1.0f);
   146         }
   133         }
   147 
   134 
   148         public boolean canEncode(char c) {
   135         public boolean canEncode(char c) {
   269             if (src.hasArray() && dst.hasArray())
   256             if (src.hasArray() && dst.hasArray())
   270                 return encodeArrayLoop(src, dst);
   257                 return encodeArrayLoop(src, dst);
   271             else
   258             else
   272                 return encodeBufferLoop(src, dst);
   259                 return encodeBufferLoop(src, dst);
   273         }
   260         }
   274 
       
   275         private byte repl = (byte)'?';
       
   276         protected void implReplaceWith(byte[] newReplacement) {
       
   277             repl = newReplacement[0];
       
   278         }
       
   279 
       
   280         public int encode(char[] src, int sp, int len, byte[] dst) {
       
   281             int dp = 0;
       
   282             int slen = Math.min(len, dst.length);
       
   283             int sl = sp + slen;
       
   284             while (sp < sl) {
       
   285                 int ret = encodeISOArray(src, sp, dst, dp, slen);
       
   286                 sp = sp + ret;
       
   287                 dp = dp + ret;
       
   288                 if (ret != slen) {
       
   289                     char c = src[sp++];
       
   290                     if (Character.isHighSurrogate(c) && sp < sl &&
       
   291                         Character.isLowSurrogate(src[sp])) {
       
   292                         if (len > dst.length) {
       
   293                             sl++;
       
   294                             len--;
       
   295                         }
       
   296                         sp++;
       
   297                     }
       
   298                     dst[dp++] = repl;
       
   299                     slen = Math.min((sl - sp), (dst.length - dp));
       
   300                 }
       
   301             }
       
   302             return dp;
       
   303         }
       
   304 
       
   305         public boolean isASCIICompatible() {
       
   306             return true;
       
   307         }
       
   308     }
   261     }
   309 }
   262 }