/*
* Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*/
/*
*/
package sun.nio.cs.ext;
import java.nio.CharBuffer;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.CoderResult;
import sun.nio.cs.HistoricallyNamedCharset;
public class IBM964
extends Charset
implements HistoricallyNamedCharset
{
public IBM964() {
super("x-IBM964", ExtendedCharsets.aliasesFor("x-IBM964"));
}
public String historicalName() {
return "Cp964";
}
public boolean contains(Charset cs) {
return (cs instanceof IBM964);
}
public CharsetDecoder newDecoder() {
return new Decoder(this);
}
public CharsetEncoder newEncoder() {
return new Encoder(this);
}
protected static class Decoder extends CharsetDecoder {
private final int SS2 = 0x8E;
private final int SS3 = 0x8F;
private String mappingTableG2;
public Decoder(Charset cs) {
super(cs, 1.0f, 1.0f);
}
private CoderResult decodeArrayLoop(ByteBuffer src, CharBuffer dst) {
byte[] sa = src.array();
int sp = src.arrayOffset() + src.position();
int sl = src.arrayOffset() + src.limit();
assert (sp <= sl);
sp = (sp <= sl ? sp : sl);
char[] da = dst.array();
int dp = dst.arrayOffset() + dst.position();
int dl = dst.arrayOffset() + dst.limit();
assert (dp <= dl);
dp = (dp <= dl ? dp : dl);
try {
while (sp < sl) {
int byte1, byte2;
int inputSize = 1;
char outputChar = '\uFFFD';
byte1 = sa[sp] & 0xff;
if (byte1 == SS2) {
if (sl - sp < 4) {
return CoderResult.UNDERFLOW;
}
byte1 = sa[sp + 1] & 0xff;
inputSize = 2;
if ( byte1 == 0xa2)
mappingTableG2 = mappingTableG2a2;
else if ( byte1 == 0xac)
mappingTableG2 = mappingTableG2ac;
else if ( byte1 == 0xad)
mappingTableG2 = mappingTableG2ad;
else
return CoderResult.malformedForLength(2);
byte1 = sa[sp + 2] & 0xff;
if ( byte1 < 0xa1 || byte1 > 0xfe) {
return CoderResult.malformedForLength(3);
}
byte2 = sa[sp + 3] & 0xff;
if ( byte2 < 0xa1 || byte2 > 0xfe) {
return CoderResult.malformedForLength(4);
}
inputSize = 4;
outputChar = mappingTableG2.charAt(((byte1 - 0xa1) * 94) + byte2 - 0xa1);
} else if(byte1 == SS3 ) {
return CoderResult.malformedForLength(1);
} else if ( byte1 <= 0x9f ) { // valid single byte
outputChar = byteToCharTable.charAt(byte1);
} else if (byte1 < 0xa1 || byte1 > 0xfe) { // invalid range?
return CoderResult.malformedForLength(1);
} else { // G1
if (sl - sp < 2) {
return CoderResult.UNDERFLOW;
}
byte2 = sa[sp + 1] & 0xff;
inputSize = 2;
if ( byte2 < 0xa1 || byte2 > 0xfe) {
return CoderResult.malformedForLength(2);
}
outputChar = mappingTableG1.charAt(((byte1 - 0xa1) * 94) + byte2 - 0xa1);
}
if (outputChar == '\uFFFD')
return CoderResult.unmappableForLength(inputSize);
if (dl - dp < 1)
return CoderResult.OVERFLOW;
da[dp++] = outputChar;
sp += inputSize;
}
return CoderResult.UNDERFLOW;
} finally {
src.position(sp - src.arrayOffset());
dst.position(dp - dst.arrayOffset());
}
}
private CoderResult decodeBufferLoop(ByteBuffer src, CharBuffer dst) {
int mark = src.position();
try {
while (src.hasRemaining()) {
int byte1, byte2;
int inputSize = 1;
char outputChar = '\uFFFD';
byte1 = src.get() & 0xff;
if (byte1 == SS2) {
if (src.remaining() < 3)
return CoderResult.UNDERFLOW;
byte1 = src.get() & 0xff;
inputSize = 2;
if ( byte1 == 0xa2)
mappingTableG2 = mappingTableG2a2;
else if ( byte1 == 0xac)
mappingTableG2 = mappingTableG2ac;
else if ( byte1 == 0xad)
mappingTableG2 = mappingTableG2ad;
else
return CoderResult.malformedForLength(2);
byte1 = src.get() & 0xff;
if ( byte1 < 0xa1 || byte1 > 0xfe)
return CoderResult.malformedForLength(3);
byte2 = src.get() & 0xff;
if ( byte2 < 0xa1 || byte2 > 0xfe)
return CoderResult.malformedForLength(4);
inputSize = 4;
outputChar = mappingTableG2.charAt(((byte1 - 0xa1) * 94) + byte2 - 0xa1);
} else if (byte1 == SS3 ) {
return CoderResult.malformedForLength(1);
} else if ( byte1 <= 0x9f ) { // valid single byte
outputChar = byteToCharTable.charAt(byte1);
} else if (byte1 < 0xa1 || byte1 > 0xfe) { // invalid range?
return CoderResult.malformedForLength(1);
} else { // G1
if (src.remaining() < 1)
return CoderResult.UNDERFLOW;
byte2 = src.get() & 0xff;
if ( byte2 < 0xa1 || byte2 > 0xfe) {
return CoderResult.malformedForLength(2);
}
inputSize = 2;
outputChar = mappingTableG1.charAt(((byte1 - 0xa1) * 94) + byte2 - 0xa1);
}
if (outputChar == '\uFFFD')
return CoderResult.unmappableForLength(inputSize);
if (!dst.hasRemaining())
return CoderResult.OVERFLOW;
dst.put(outputChar);
mark += inputSize;
}
return CoderResult.UNDERFLOW;
} finally {
src.position(mark);
}
}
protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
if (true && src.hasArray() && dst.hasArray())
return decodeArrayLoop(src, dst);
else
return decodeBufferLoop(src, dst);
}
private final static String byteToCharTable;
private fina
没有合适的资源?快使用搜索试试~ 我知道了~
jdk12源代码
共17560个文件
java:17560个
需积分: 11 12 下载量 82 浏览量
2019-04-15
13:31:46
上传
评论 1
收藏 46.14MB ZIP 举报
温馨提示
这是JDK12的源代码,供学习参考。 它是Jdk中的源代码。
资源推荐
资源详情
资源评论
收起资源包目录
jdk12源代码 (17560个子文件)
IBM964.java 874KB
GB18030.java 746KB
EUC_TWMapping.java 618KB
IBM33722.java 600KB
CachedRowSetImpl.java 430KB
Character.java 424KB
JDWP.java 404KB
Arrays.java 393KB
Component.java 381KB
JTable.java 373KB
MethodHandles.java 330KB
CompilerProperties.java 313KB
JdbcRowSetImpl.java 293KB
AccessBridge.java 280KB
ConcurrentHashMap.java 259KB
CodeGenerator.java 235KB
BytecodeParser.java 232KB
Attr.java 232KB
BigDecimal.java 229KB
Pattern.java 220KB
DateTimeFormatterBuilder.java 217KB
SyncResolverImpl.java 215KB
Collections.java 213KB
BaseRowSet.java 210KB
JComponent.java 210KB
JTree.java 207KB
Parser.java 206KB
IBM1364.java 204KB
ResultSet.java 203KB
Resolve.java 203KB
JoinRowSetImpl.java 201KB
BidiBase.java 200KB
XSDHandler.java 200KB
IBM933.java 199KB
LineReaderImpl.java 199KB
Formatter.java 198KB
TimeZoneNames_ccp.java 196KB
IBM950.java 195KB
Main.java 193KB
MS950.java 192KB
MS936.java 192KB
GBK.java 192KB
Types.java 192KB
MS949.java 191KB
Container.java 189KB
JTextComponent.java 189KB
XMLSchemaValidator.java 189KB
Johab.java 185KB
AMD64MathIntrinsicUnaryOp.java 185KB
Files.java 183KB
DecimalFormat.java 181KB
ClassReader.java 181KB
NimbusDefaults.java 181KB
BasicTreeUI.java 176KB
IBM937.java 176KB
BigInteger.java 175KB
IBM948.java 175KB
JavacParser.java 167KB
HTMLDocument.java 166KB
Class.java 164KB
ResourceBundle.java 163KB
BasicTabbedPaneUI.java 163KB
XPathParser.java 161KB
DatabaseMetaData.java 159KB
SunFontManager.java 158KB
Check.java 158KB
Lower.java 155KB
HKSCSMapping.java 155KB
compiler_ja.java 154KB
ObjectInputStream.java 153KB
HKSCS2001Mapping.java 152KB
Window.java 149KB
JShellTool.java 147KB
Unsafe.java 145KB
AMD64Assembler.java 145KB
HttpURLConnection.java 145KB
TimeZoneNames_uk.java 145KB
PluginFactory_HotSpotReplacementsUtil.java 145KB
JList.java 144KB
LocaleNames_ccp.java 144KB
AffineTransform.java 143KB
TIFFImageWriter.java 143KB
RelationService.java 142KB
Locale.java 141KB
XSSimpleTypeDecl.java 141KB
Calendar.java 140KB
TimeZoneNames_km.java 140KB
GroupLayout.java 140KB
TimeZoneNames_hy.java 137KB
TimeZoneNames_ml.java 137KB
Big5.java 137KB
TimeZoneNames_mk.java 137KB
TimeZoneNames_my.java 136KB
ForkJoinPool.java 136KB
TimeZoneNames_bg.java 136KB
URI.java 135KB
CollationData_zh_TW.java 135KB
ScriptObject.java 135KB
SunGraphics2D.java 134KB
TimeZoneNames_ta.java 134KB
共 17560 条
- 1
- 2
- 3
- 4
- 5
- 6
- 176
资源评论
dstang2000
- 粉丝: 2
- 资源: 17
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功