ByteBuffer写入数组BufferUnderflowException异常

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)

请问这怎么办
回复次数:5
ldh911
关注
ldh911
MiceRice
等级: Blank
2
13
#1 得分:0回复于: 2012-01-20 11:42:11
你的ByteBuffer才50,但是你buf.get(byt)这里面的字节数组长度是100,ByteBuffer表示它搞不定了。
motLovejava
关注
motLovejava
艾姆喔替
等级: Blank
#2 得分:0回复于: 2012-01-20 11:56:34
 我知道那个 改过 ByteBuffer 跟 byte的大小 
不管谁大谁小 都出那个异常
lost_guy_in_scut
关注
lost_guy_in_scut
lost_guy_in_scut
等级: Blank
#3 得分:0回复于: 2012-01-20 12:50:57
Java code ?
1
2
3
4
5
ByteBuffer buf = ByteBuffer.allocate( 50 );  //这里要改大
chf.read(buf);       //这句话抛的异常
buf.flip();
byte  [] byt =  new  byte [ 100 ];
buf.get(byt);

参考如下代码
Java code ?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
     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
     }
lost_guy_in_scut
关注
lost_guy_in_scut
lost_guy_in_scut
等级: Blank
#4 得分:0回复于: 2012-01-20 12:52:40
少一段代码,忘记关闭了。
Java code ?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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();
     }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值