JAVA NIO BUFFER (六)创建Buffer对象

举报
张俭 发表于 2023/12/29 15:12:05 2023/12/29
【摘要】 在JAVA NIO BUFFER(一)看到了七个基本的buffer类,我们以CharBuffer为例。来看看如何创建一个CharBuffer对象:public abstract class CharBuffer extends Buffer implements CharSequence, Comparable { public static CharBuffer allocate (in...

JAVA NIO BUFFER(一)看到了七个基本的buffer类,我们以CharBuffer为例。来看看如何创建一个CharBuffer对象:

public abstract class CharBuffer extends Buffer implements CharSequence, Comparable {
  public static CharBuffer allocate (int capacity)

  public static CharBuffer wrap(char[] array)
  public static CharBuffer wrap(char[] array, int offset, int length)

  public final boolean hasArray()
  public final char[] array()
  public final int arrayOffset()
}

通过包装或者分配都可以构造一个新的Buffer对象,分配方式创建了一个Buffer对象并且给它分配了私人空间。包装方式创建了一个Buffer对象但是没有给它分配私人空间(就使用你传递给它的数组参数)

  //分配一个CharBuffer可以容纳100个字符
  CharBuffer charBuffer = CharBuffer.allocate(100);
  //如果你想要使用你自己的数组
  char[] myArray = new char[100];
  CharBuffer charBuffer = CharBuffer.wrap(myArray);

那么你觉得如下的代码会怎么样呢

  CharBuffer charBuffer = CharBuffer.wrap(myArray,12,42);

会分配一个大小为30的数组给你操作?

不是,假如myArray的长度是100,CharBuffer还是掌控着长度为100的数组,只是初始的position为12,limit为42.而后面要提到的slice方法可以生成一个只能够操作给定范围的CharBuffer。

通过allocate或者wrap生成的buffer是不直接的。不直接的buffer包含有着数组。hasArray方法告诉你是否存在数组,如果这个方法返回true,那么array方法就会返回给你这个数组的引用。如果返回false,不要调用array或者arrayOffset方法,否则就会抛出UnsupportedOperationException.

如果Buffer是只读的,就算它是通过wrap数组方法生成的,调用它的array或者arrayOffset方法也会抛出ReadOnlyBufferException 防止你通过数组修改只读数据。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。