代码异常 遍历的肯定不是容量啊,后面都是空的,没放东西,限制可能是limit吧,忘了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 package NewIO;import java.nio.*;import java.nio.charset.CharacterCodingException;import java.nio.charset.Charset;import java.nio.charset.CharsetDecoder;import java.nio.charset.CharsetEncoder;public class CharsetTransformTest { public static void main(String[] args) throws CharacterCodingException { // 创建简体中文对应的Charset Charset cn = Charset.forName("GBK"); CharsetEncoder cnEncoder = cn.newEncoder(); CharsetDecoder cnDecoder = cn.newDecoder(); CharBuffer chbuf = CharBuffer.allocate(10); chbuf.put('a'); chbuf.put('b'); chbuf.put('c'); chbuf.put('d'); chbuf.flip(); // 将CharBuffer中的字符序列转换成字节序列 ByteBuffer bbuf = cnEncoder.encode(chbuf); System.out.println("bbuf.capacity():" + bbuf.capacity()); System.out.println("chbuf.capacity():" + chbuf.capacity()); // 循环访问每个字节 for (int i = 0; i < bbuf.limit(); i++) { System.out.println(bbuf.get(i) + ""); } System.out.println("\n" + cnDecoder.decode(bbuf)); }}这样改就可以了 虽然我没有运行但是应该是索引异常吧,而且你的输出值应该是四个因为capacity 是字符串缓冲区的容量,你为chbuf 它 分配了四个缓冲区, 所以你当然只能输出四个啦,如果你再分配一个就会出现五个 capacity=8,运行一下看看我加入的都是字符,一个char型的不是两个字节吗? 调用flip方法的时候会重置limit将limit的值设置为当前position然后将其重置循环的时候发现大于limit了就抛出了异常 我调的是CharBuffer chbuf的filp,不是调的Bytebuffer bbuf的flipfor循环里是bbuf.capacity() 我调的是CharBuffer chbuf的filp,不是调的Bytebuffer bbuf的flipfor循环里是bbuf.capacity()在cnEncoder.encode(chbuf);调用时,会构造一个ByteBuffer out这个out最后是会flip的int n = (int)(in.remaining() * averageBytesPerChar()); ByteBuffer out = ByteBuffer.allocate(n); if ((n == 0) && (in.remaining() == 0)) return out; reset(); for (;;) { CoderResult cr = in.hasRemaining() ? encode(in, out, true) : CoderResult.UNDERFLOW; if (cr.isUnderflow()) cr = flush(out); if (cr.isUnderflow()) break; if (cr.isOverflow()) { n = 2*n + 1; // Ensure progress; n might be 0! ByteBuffer o = ByteBuffer.allocate(n); out.flip(); o.put(out); out = o; continue; } cr.throwException(); } out.flip(); return out; 怎样使jpanel标签页面中的按钮加入保存功能 比较JAVA /DELPHI / POWER BUILDER / VC++ / C# 的前途 有人面试过中华网吗 如何在java中调用windows media player 并在客户端显示出来? socket 接收数据问题 在Eclipse中如何修改web.xml文件 数据结构中变量的问题 再一次要疯了。。。。。。 请教大家 java和c的问题 请教一个问题? Swing程序求帮忙. 新手求帮助!真的是!
package NewIO;import java.nio.*;
import java.nio.charset.CharacterCodingException;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;public class CharsetTransformTest {
public static void main(String[] args) throws CharacterCodingException {
// 创建简体中文对应的Charset
Charset cn = Charset.forName("GBK");
CharsetEncoder cnEncoder = cn.newEncoder();
CharsetDecoder cnDecoder = cn.newDecoder();
CharBuffer chbuf = CharBuffer.allocate(10);
chbuf.put('a');
chbuf.put('b');
chbuf.put('c');
chbuf.put('d');
chbuf.flip();
// 将CharBuffer中的字符序列转换成字节序列
ByteBuffer bbuf = cnEncoder.encode(chbuf);
System.out.println("bbuf.capacity():" + bbuf.capacity());
System.out.println("chbuf.capacity():" + chbuf.capacity());
// 循环访问每个字节
for (int i = 0; i < bbuf.limit(); i++) {
System.out.println(bbuf.get(i) + "");
}
System.out.println("\n" + cnDecoder.decode(bbuf));
}
}
这样改就可以了
因为
capacity 是字符串缓冲区的容量,你为chbuf 它 分配了四个缓冲区, 所以你当然只能输出四个啦,如果你再分配一个就会出现五个
我加入的都是字符,一个char型的不是两个字节吗?
循环的时候发现大于limit了就抛出了异常
for循环里是bbuf.capacity()
for循环里是bbuf.capacity()
在cnEncoder.encode(chbuf);调用时,会构造一个ByteBuffer out
这个out最后是会flip的
int n = (int)(in.remaining() * averageBytesPerChar());
ByteBuffer out = ByteBuffer.allocate(n); if ((n == 0) && (in.remaining() == 0))
return out;
reset();
for (;;) {
CoderResult cr = in.hasRemaining() ?
encode(in, out, true) : CoderResult.UNDERFLOW;
if (cr.isUnderflow())
cr = flush(out); if (cr.isUnderflow())
break;
if (cr.isOverflow()) {
n = 2*n + 1; // Ensure progress; n might be 0!
ByteBuffer o = ByteBuffer.allocate(n);
out.flip();
o.put(out);
out = o;
continue;
}
cr.throwException();
}
out.flip();
return out;