title: BufferUnderflowException? Here?
body: <p>I am writing a small UDP server in Java. When the server receives a command ('GET_VIDEO'), he reads a file ('video.raw') and then sends it to the client. </p>
  
  <p>Here is my code : </p>
  
  <pre><code>public class ServeurBouchon {
  
      /**
       * @param args
       */
      public static void main(String[] args) throws Exception {
  
          byte[] buff = new byte[64];
          int port = 8080;
          DatagramPacket packet = new DatagramPacket(buff, buff.length);
          DatagramSocket socket = new DatagramSocket(port);
  
          System.out.println("Server started at 8080 ...");
  
          while (true) {
              socket.receive(packet);
              new ThreadVideo(socket, packet).run();
          }
  
      }
  
      public static class ThreadVideo extends Thread {
  
          private DatagramSocket socket;
          private DatagramPacket packet;
  
          public ThreadVideo(DatagramSocket socket, DatagramPacket packet) {
              this.packet = packet;
              this.socket = socket;
          }
  
          public void run() {
              String cmd = new String(packet.getData(), 0, packet.getLength());
              System.out.println("S:CMD reçu :" + cmd);
              if ("GET_VIDEO".equals(cmd)) {
                  read_and_send_video(this.packet.getAddress());
              } else if ("TIMEOUT_REQUEST".equals(cmd)) {
                  return;
              } else {
                  System.out.println(" Exiting ...");
                  return;
              }
              System.out.println("Fin .....");
          }
  
          private void read_and_send_video(InetAddress address) {
              System.out.println(" reading and sending video ...");
              File file = new File("./video/video.raw");
              ByteBuffer ibb = ByteBuffer.allocate(4);
              ibb.order(ByteOrder.BIG_ENDIAN);
  
              FileInputStream fis = null;
              DatagramPacket pack;
              byte[] buff = new byte[4];
              System.out.println(" Sending ...");
              try {
                  fis = new FileInputStream(file);
                  int size = 0;
                  while ( size != -1) {
                      size = fis.read(buff, 0, buff.length);
                      System.out.println(" size = " + size);
                      ibb.put(buff);                  
                      System.out.println("Size : " + ibb.getInt());
                      int length = ibb.getInt();
                      byte[] fbuff = new byte[length];                    
                      fis.read(fbuff, 0, length);
  
                      pack = new DatagramPacket(fbuff, fbuff.length, address,
                              packet.getPort());
                      socket.send(pack);
                  }
  
              } catch (FileNotFoundException e) {
                  e.printStackTrace();
              } catch (IOException e) {
                  e.printStackTrace();
              }
  
          }
      }
  
  }
  </code></pre>
  
  <p>The raw file format is a continuous of "size + frame". The "size" variable contains the size(an int) of the next frame to be read. My problem is when I am reading the file(in the line <strong>ibb.getInt()</strong>), I get this exception :</p>
  
  <pre><code>Exception in thread "main" java.nio.BufferUnderflowException
  at java.nio.Buffer.nextGetIndex(Buffer.java:480)
  at java.nio.HeapByteBuffer.getInt(HeapByteBuffer.java:336)
  at fr.sar.dss.bouchon.ServeurBouchon$ThreadVideo.read_and_send_video(ServeurBouchon.java:75)
  at fr.sar.dss.bouchon.ServeurBouchon$ThreadVideo.run(ServeurBouchon.java:48)
  at fr.sar.dss.bouchon.ServeurBouchon.main(ServeurBouchon.java:29)
  </code></pre>
  
  <p>Maybe I am doing this wrong but can somebody tells me where is my mistake?</p>
  
  <p>Thansk for your help ;)</p>