为什么可以直接使用CharBuffer中的抽象方法get()和put()
本帖最后由 flyerttt 于 2013-07-24 21:53:55 编辑
import java.nio.CharBuffer;
public class BufferTest{
private static int index = 0;
private static String[] strings = {
"A random string value",
"The product of an infinite number of monkeys",
"Hey hey we're the Monkees",
"Opening act for the Monkees: Jimi Hendrix",
"'Scuse me while I kiss this fly'",
"Help Me! Help Me!"
};
private static void drainBuffer(CharBuffer buffer){
while (buffer.hasRemaining()){
System.out.print(buffer.get());
}
System.out.println();
}
private static boolean fillBuffer(CharBuffer buffer){
if ( index >= strings.length) return false ;
String string=strings[index++];
for (int i=0;i<string.length();i++)
buffer.put(string.charAt(i));
return true ;
}
public static void main(String args[]) throws Exception{
CharBuffer buffer = CharBuffer.allocate (100);
while (fillBuffer(buffer)){
buffer.flip();
drainBuffer (buffer);
buffer.clear();
}
}
}
public abstract char get()
我又打开了CharBuffer.java,里面确实只有public abstract char get();,不知道到底是怎么一回事,难道JVM里默认使用了其重载版本 public CharBuffer get(char[] dst,int offset,int length)? CharBuffer 抽象方法get 直接使用
[解决办法]
CharBuffer buffer = CharBuffer.allocate (100);
System.out.println(buffer.getClass()); // 看看是啥
[解决办法]
allocate这个方法是静态的,不是抽象的,返回一个CharBuffer 类型的对象,这个对象是CharBuffer 的一个实现类而已。就像List的subList方法,返回一个List类型的对象。