/*
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
*/
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);
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
jdk8-source(JDK8源码包含rt.jar下所有包) (11284个子文件)
aliasmap 32KB
com.sun.tools.attach.spi.AttachProvider 2KB
java.c 67KB
java_md.c 47KB
parse_manifest.c 21KB
wildcard.c 12KB
version_comp.c 10KB
main.c 3KB
splashscreen_stubs.c 2KB
jli_util.c 2KB
sun.java2d.cmm.CMMServiceProvider 78B
ldml.dtd 83KB
ldmlSupplemental.dtd 26KB
mbeanserverdelegate.gif 1KB
xobject.gif 937B
mbean.gif 294B
java.h 9KB
manifest_info.h 6KB
emessages.h 5KB
jli_util.h 3KB
defines.h 2KB
java_md.h 863B
splashscreen.h 664B
version_comp.h 552B
wildcard.h 344B
package.html 7KB
certAttributes.html 6KB
package.html 2KB
package.html 2KB
package.html 2KB
package.html 2KB
package.html 1KB
package.html 1KB
package.html 1KB
package.html 1KB
package.html 1KB
package.html 1KB
package.html 1KB
package.html 1KB
unorm.icu 124KB
uprops.icu 91KB
ubidi.icu 19KB
psfont.properties.ja 4KB
IBM964.java 864KB
GB18030.java 735KB
IBM33722.java 601KB
Component.java 369KB
JTable.java 367KB
ORBUtilSystemException.java 335KB
Character.java 259KB
ConcurrentHashMap.java 256KB
Arrays.java 222KB
Pattern.java 215KB
BigDecimal.java 215KB
XPathParser.java 211KB
Collections.java 211KB
BaseRowSet.java 210KB
JComponent.java 206KB
ResultSet.java 203KB
JTree.java 202KB
XSDHandler.java 197KB
DateTimeFormatterBuilder.java 195KB
Container.java 189KB
Formatter.java 187KB
JTextComponent.java 185KB
Main.java 181KB
NimbusDefaults.java 180KB
XMLSchemaValidator.java 174KB
DecimalFormat.java 173KB
SunFontManager.java 166KB
Files.java 165KB
BasicTreeUI.java 164KB
BigInteger.java 164KB
MethodHandles.java 162KB
PolicyTool.java 160KB
HTMLDocument.java 160KB
DatabaseMetaData.java 159KB
Window.java 150KB
BidiBase.java 149KB
BasicTabbedPaneUI.java 148KB
ForkJoinPool.java 148KB
ObjectInputStream.java 147KB
RelationService.java 147KB
Class.java 144KB
AffineTransform.java 143KB
JList.java 142KB
HttpURLConnection.java 142KB
GroupLayout.java 140KB
Calendar.java 139KB
XSSimpleTypeDecl.java 138KB
CollationData_zh_TW.java 136KB
GregorianCalendar.java 133KB
Locale.java 133KB
OMGSystemException.java 133KB
ConcurrentSkipListMap.java 133KB
SunGraphics2D.java 131KB
URI.java 131KB
CallableStatement.java 131KB
ComponentColorModel.java 131KB
XMLDocumentFragmentScannerImpl.java 130KB
共 11284 条
- 1
- 2
- 3
- 4
- 5
- 6
- 113
资源评论
- daiyuezai2019-12-28com.sun下面不全,
扣天辰
- 粉丝: 6
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功