/**
   * Method write.
   *
   * @param packet PcapPacket
   * @throws IOException * @see org.krakenapps.pcap.PcapOutputStream#write(PcapPacket) * @see
   *     org.krakenapps.pcap.PcapOutputStream#write(PcapPacket)
   */
  public void write(PcapPacket packet) throws IOException {
    PacketHeader packetHeader = packet.getPacketHeader();

    int tsSec = packetHeader.getTsSec();
    int tsUsec = packetHeader.getTsUsec();
    int inclLen = packetHeader.getInclLen();
    int origLen = packetHeader.getOrigLen();

    addInt(tsSec);
    addInt(tsUsec);
    addInt(inclLen);
    addInt(origLen);

    Buffer payload = packet.getPacketData();

    try {
      payload.mark();
      while (true) {
        list.add(payload.get());
      }
    } catch (BufferUnderflowException e) {
      // LOG.debug("Ignorable exception while writing packet", e);
      payload.reset();
    }

    cachedPacketNum++;
    if (cachedPacketNum == MAX_CACHED_PACKET_NUMBER) {
      flush();
    }
  }