Запись байтов в файл из нескольких пакетов - PullRequest
0 голосов
/ 03 апреля 2019

Я работаю над алгоритмом, который будет получать данные, и я хочу записать их в файл. Первый пакет, который я получаю, - это пакет, содержащий fileName. Второй пакет содержит sizeOfPacket. Затем я должен рассчитать количество пакетов, которые я получаю. Но моя настоящая проблема начинается, когда я хочу получить следующие пакеты и записать эти пакеты в файл побайтно. Я пробовал это разными способами, но каждый раз результирующий файл имеет размер всего 1 КБ, а фактическое изображение - 72 КБ. Я должен читать из пакетов с 4-го байта, потому что первые 4 байта хранят положение пакета в файле.

Размер каждого пакета 1024B

public void run(int port) throws IOException {    
      try {
            byte[] receiveData = new byte[1024];
            DatagramSocket serverSocket = new DatagramSocket(port);

            System.out.printf("Listening on udp:%s:%d%n",
            InetAddress.getLocalHost().getHostAddress(), port);     
            DatagramPacket receivePacket = new DatagramPacket(
                               receiveData,
                               SIZE_OF_PACKET
                               );

            //first packet with name of file
            serverSocket.receive(receivePacket);
            String fileName = utils.getFileName(receivePacket);

            //System.out.println(fileName);
            //System.out.println(fileName.length());

            //second packet with size of whole data()
            serverSocket.receive(receivePacket);
            int sizeOfFile = utils.BytesToInt(receivePacket);

            //get number of packets that are needed
            int numOfPackets = utils.getNumOfPackets(sizeOfFile);
            //System.out.println(sizeOfFile);
            //System.out.println(numOfPackets);

            //output stream for file "test.jpg"
              FileOutputStream fos = new FileOutputStream("test.jpg");
              //loop over for the number of Packets
              for(int i = 0; i < numOfPackets - 1; i++) {
                  serverSocket.receive(receivePacket);
                  receiveData = receivePacket.getData();
                  //byte byte after byte and write it to the file
                  // start at index 3 bcs first byte is packet number
                  for(int a = 3; a < SIZE_OF_PACKET - 1;a++) {
                      Byte nextByte = receiveData[a];
                      if(nextByte != 0) fos.write(nextByte);

                  }

              }
              fos.close();
              serverSocket.close();

      } catch (IOException e) {
          e.printStackTrace();
    }
...