Q1:the System.out.println(this.byteBuffer.position()); is still return 0,which means that no byte map into byteBuffer..
the .position() of the buffer is no indication of whether any data was loaded. When reading bytes from a mapped bytebuffer, the data is automatically loaded from disk - .position() is there for whatever you want to use it for. The data is there.
Q2:when I use FileChannel.read() to read byte to byteBuffer it's ok,but when I render use glDrawPixels it always return :
Number of remaining buffer elements is 4332, must be at least 60492. Because at most 60492 elements can be returned, a buffer with at least 60492 elements is required, regardless of actual returned element count
I don't know what It means...
You are trying to feed PNG encoded data into a method that expects pixels.
On a sidenote.... how long are you going to try to make glDrawPixels(..) work? It's the absolute slowest way to render an image. Try to read up on textures instead.