在JAVA NIO BUFFER(一)看到了七個(gè)基本的buffer類,我們以CharBuffer為例僵娃。來(lái)看看如何創(chuàng)建一個(gè)CharBuffer對(duì)象:
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()
}
通過(guò)包裝或者分配都可以構(gòu)造一個(gè)新的Buffer對(duì)象嚷炉,分配方式創(chuàng)建了一個(gè)Buffer對(duì)象并且給它分配了私人空間舞蔽。包裝方式創(chuàng)建了一個(gè)Buffer對(duì)象但是沒(méi)有給它分配私人空間(就使用你傳遞給它的數(shù)組參數(shù))
//分配一個(gè)CharBuffer可以容納100個(gè)字符
CharBuffer charBuffer = CharBuffer.allocate(100);
//如果你想要使用你自己的數(shù)組
char[] myArray = new char[100];
CharBuffer charBuffer = CharBuffer.wrap(myArray);
那么你覺(jué)得如下的代碼會(huì)怎么樣呢
CharBuffer charBuffer = CharBuffer.wrap(myArray,12,42);
會(huì)分配一個(gè)大小為30的數(shù)組給你操作租副?
不是抗愁,假如myArray的長(zhǎng)度是100郑藏,CharBuffer還是掌控著長(zhǎng)度為100的數(shù)組衡查,只是初始的position為12,limit為42.而后面要提到的slice方法可以生成一個(gè)只能夠操作給定范圍的CharBuffer必盖。
通過(guò)allocate或者wrap生成的buffer是不直接的拌牲。不直接的buffer包含有著數(shù)組俱饿。hasArray方法告訴你是否存在數(shù)組,如果這個(gè)方法返回true塌忽,那么array方法就會(huì)返回給你這個(gè)數(shù)組的引用稍途。如果返回false,不要調(diào)用array或者arrayOffset方法砚婆,否則就會(huì)拋出UnsupportedOperationException.
如果Buffer是只讀的械拍,就算它是通過(guò)wrap數(shù)組方法生成的,調(diào)用它的array或者arrayOffset方法也會(huì)拋出ReadOnlyBufferException 防止你通過(guò)數(shù)組修改只讀數(shù)據(jù)装盯。