VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 927|回复: 4

为什么这里会抛出异常呢?

[复制链接]

3

主题

17

帖子

14.00

积分

新手上路

Rank: 1

积分
14.00
发表于 2020-1-15 17:20:01 | 显示全部楼层 |阅读模式
import java.nio.*;
//import java.util.*;

public class UsingBuffers
{
        public static void changePos(CharBuffer cb)
        {
                while(cb.hasRemaining())
                {
                        cb.mark();
                        char c1=cb.get();
                        char c2=cb.get();
                        cb.reset();
                        cb.put(c2).put(c1);
                }
        }
        public static void main(String[] args)
        {
                //ByteBuffer buf=ByteBuffer.allocate(1024);
                CharBuffer cb=CharBuffer.wrap("ababab");
                //cb.put("ababab");
                changePos((CharBuffer)cb.rewind());
                System.out.println((CharBuffer)cb.rewind());
        }
}
调用该static方法就会抛出异常,不调用则不会,这是怎么回事啊?
回复

使用道具 举报

1

主题

20

帖子

15.00

积分

新手上路

Rank: 1

积分
15.00
发表于 2020-1-22 19:27:02 | 显示全部楼层
因为传入的CharBuffer是ReadOnly的,不能被put
回复

使用道具 举报

3

主题

17

帖子

14.00

积分

新手上路

Rank: 1

积分
14.00
 楼主| 发表于 2020-1-22 22:00:02 | 显示全部楼层
那为什么这样就可以呢?
ByteBuffer buf=ByteBuffer.allocate(1024);
CharBuffer cb=buf.asCharBuffer();
cb.put("fsdfd");
将cb传给函数不会有异常抛出。。。。
回复

使用道具 举报

3

主题

17

帖子

14.00

积分

新手上路

Rank: 1

积分
14.00
 楼主| 发表于 2020-1-22 22:09:01 | 显示全部楼层
帮自己顶
回复

使用道具 举报

1

主题

20

帖子

15.00

积分

新手上路

Rank: 1

积分
15.00
发表于 2020-1-22 23:36:01 | 显示全部楼层
asCharBuffer
public abstract CharBuffer asCharBuffer()
Creates a view of this byte buffer as a char buffer.
The content of the new buffer will start at this buffer's current position. Changes to this buffer's content will be visible in the new buffer, and vice versa; the two buffers' position, limit, and mark values will be independent.

The new buffer's position will be zero, its capacity and its limit will be the number of bytes remaining in this buffer divided by two, and its mark will be undefined. The new buffer will be direct if, and only if, this buffer is direct, and it will be read-only if, and only if, this buffer is read-only.


Returns:
A new char buffer

看最后一句:and it will be read-only if, and only if, this buffer is read-only.
由此看来,这样申请的ByteBuffer buf=ByteBuffer.allocate(1024);
ByteBuffer是可以write的
lz可以用这个方法审查
isReadOnly()
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表