chf是前文的一个FileChannel ByteBuffer buf = ByteBuffer.allocate(50);
chf.read(buf);
buf.flip();
byte [] byt = new byte[100];
buf.get(byt);
然后就出来了 :
Exception in thread "main" java.nio.BufferUnderflowException
at java.nio.HeapByteBuffer.get(Unknown Source)
at java.nio.ByteBuffer.get(Unknown Source)
at Sample.main(Sample.java:22)请问这怎么办

解决方案 »

  1.   

    你的ByteBuffer才50,但是你buf.get(byt)这里面的字节数组长度是100,ByteBuffer表示它搞不定了。
      

  2.   

     我知道那个 改过 ByteBuffer 跟 byte的大小 
    不管谁大谁小 都出那个异常
      

  3.   

    ByteBuffer buf = ByteBuffer.allocate(50); //这里要改大
    chf.read(buf);      //这句话抛的异常
    buf.flip();
    byte [] byt = new byte[100];
    buf.get(byt);参考如下代码 public static void main(String[] args) throws IOException{
    FileChannel channel = new FileOutputStream("D:/a.txt").getChannel();  
            // 字节方式写入  
            channel.write(ByteBuffer.wrap("hello, NIO world in java!".getBytes()));  
            channel.close();  
              
            // 根据FileInputStream获得通道FileChannel   
            channel = new FileInputStream("D:/a.txt").getChannel();  
            // ByteBuffer分配空间,16个字节  
            // 这里需要知道  byte是1字节, short和char是2字节,int和float是4字节   
            //                          long和double是8字节   1byte=8bit 。  基本只是还是必须记住的。  
            ByteBuffer buff = ByteBuffer.allocate(16);  
            // 字节数组数据装入buff,  
            channel.read(buff);  
            // 反转此缓冲区  
            buff.flip(); 
            byte [] byt = new byte[10];
    System.out.println(buff.get(byt)); // 根据FileOutputStream获得通道FileChannel
    }
      

  4.   

    少一段代码,忘记关闭了。public static void main(String[] args) throws IOException{
    FileChannel channel = new FileOutputStream("D:/a.txt").getChannel();  
            // 字节方式写入  
            channel.write(ByteBuffer.wrap("hello, NIO world in java!".getBytes()));  
            channel.close();  
              
            // 根据FileInputStream获得通道FileChannel   
            channel = new FileInputStream("D:/a.txt").getChannel();  
            // ByteBuffer分配空间,16个字节  
            // 这里需要知道  byte是1字节, short和char是2字节,int和float是4字节   
            //                          long和double是8字节   1byte=8bit 。  基本只是还是必须记住的。  
            ByteBuffer buff = ByteBuffer.allocate(16);  
            // 字节数组数据装入buff,  
            channel.read(buff);  
            // 反转此缓冲区  
            buff.flip(); 
            byte [] byt = new byte[10];
          System.out.println(buff.get(byt)); 
          channel.close();
    }