/*
* 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);
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
JAVA8 完整源码(包含Sun包源码) (13250个子文件)
aliasmap 32KB
com.sun.tools.attach.spi.AttachProvider 2KB
javax.sound.sampled.spi.AudioFileReader 222B
javax.sound.sampled.spi.AudioFileWriter 139B
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
com.sun.jdi.connect.Connector 2KB
default.css 5KB
ldml.dtd 83KB
ldmlSupplemental.dtd 26KB
synth.dtd 5KB
xmldsig-core-schema.dtd 5KB
config.dtd 3KB
exceptions 7KB
exceptions 2KB
exceptions 2KB
javax.sound.sampled.spi.FormatConversionProvider 173B
Document-notification.gif 12KB
FocusCycle.gif 7KB
Document-structure.gif 6KB
JRootPane-1.gif 5KB
ImplicitFocusTransfer.gif 5KB
editor.gif 5KB
paragraph.gif 5KB
List-1.gif 4KB
Document-remove.gif 4KB
Document-insert.gif 4KB
groupLayout.3.gif 3KB
groupLayout.2.gif 3KB
MultiScreen.gif 3KB
groupLayout.1.gif 3KB
modal-example4.gif 3KB
modal-example3.gif 3KB
UndoManager-1.gif 3KB
UndoManager-4.gif 3KB
UndoManager-2.gif 3KB
BorderLayout-1.gif 3KB
UndoManager-3.gif 3KB
JRootPane-2.gif 3KB
groupLayout.sequential.vertical.gif 3KB
groupLayout.sequential.gif 3KB
GridBagLayout-1.gif 3KB
GridBagLayout-2.gif 3KB
TextField-1.gif 2KB
JScrollPane-1.gif 2KB
Document-coord.gif 2KB
groupLayout.sequential.horizontal.gif 2KB
Checkbox-1.gif 2KB
modal-example2.gif 2KB
MenuBar-1.gif 2KB
OpenBookIcon.gif 2KB
TextArea-1.gif 2KB
modal-example1.gif 2KB
Scrollbar-2.gif 2KB
Button-1.gif 2KB
FlowLayout-1.gif 2KB
JLayeredPane-1.gif 2KB
BoxLayout-1.gif 2KB
GridLayout-2.gif 2KB
GridLayout-1.gif 2KB
Question.gif 1KB
Error.gif 1KB
mbeanserverdelegate.gif 1KB
Scrollbar-1.gif 968B
xobject.gif 937B
SizeSequence-1.gif 912B
TreeLeaf.gif 848B
Label-1.gif 819B
Inform.gif 784B
Inform.gif 764B
Warn.gif 731B
DesktopIcon.gif 721B
CheckboxGroup-1.gif 712B
Choice-1.gif 486B
close.gif 390B
Error.gif 386B
file.gif 381B
File.gif 381B
File.gif 381B
Question.gif 373B
newFolder.gif 370B
NewFolder.gif 370B
directory.gif 365B
TreeClosed.gif 365B
Directory.gif 365B
Directory.gif 365B
TreeOpen.gif 365B
upFolder.gif 354B
UpFolder.gif 354B
minimize.gif 345B
Question.gif 330B
mbean.gif 294B
FontMetrics-1.gif 290B
共 13250 条
- 1
- 2
- 3
- 4
- 5
- 6
- 133
资源评论
- 菜鸟阿达2020-09-21没指定具体的jdk 版本号,下载需谨慎
江杰
- 粉丝: 4
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功