2012-11-23 27 views
0

我正在使用java NIO數據報通道(處於阻塞模式)。我想從一側傳遞一個對象到另一側。這是我在發送端做:從ByteBuffer讀取對象時StreamCorruptedException

  ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
      ObjectOutputStream oos = new ObjectOutputStream(baos); 
      oos.writeObject(pkt); 
      ByteBuffer buffer = ByteBuffer.wrap(baos.toByteArray()); 
      while(buffer.hasRemaining()) 
       channel.write(buffer); 

這裏pkt是我的類ControlPacket的對象進行傳輸。在接收方:

  ByteBuffer buffer = ByteBuffer.allocate(8192); 
      channel.receive(buffer); 
      buffer.flip(); 
      ByteArrayInputStream bias = new ByteArrayInputStream(buffer.array(),0,buffer.limit()); 
      ObjectInputStream ois = new ObjectInputStream(bias); 
      pkt = (ControlPacket)ois.readObject(); 

但是,我得到java.io.StreamCorruptedException: invalid stream header: 00000094運行代碼時出錯。無法弄清楚代碼中的錯誤。我的意思是,由於我在接收到緩衝區後翻轉了緩衝區,讀取它的指針將被重置爲0位置,並且應該上升到最後一個字節的位置。

回答

2

在寫入緩衝區之前關閉ObjectOutputStream。