Problema com GZIP

Olá, eu preciso urgentemente compactar 50 mil arquivos .dat no formato .gz em um só arquivo, esse é o problema eu sei compactar cada um separadamente, eu sabia compactar vários em um mas agora não estou conseguindo, axo que tenho que botar um loop que alterna o FileInputStream e ir adicionando os bytes ao buffer até terminar de passar pelos arquivos ai eu escrevo .gz file usando o buffer certo? mas não estou conseguindo botar na prática alguém pooor favor poderia fazer esses dois métodos para mim?(o de ler e o de escrever) sei que quem já tem prática pode fazer em 2 minutinhos, é caso de vida ou morte e ai eu vou finalmente intender como é :?
Vlw :lol: :lol: :lol:

Criei esse:

  public static void Compress(int maxFiles) throws IOException {
      FileInputStream input = null;
      GZIPOutputStream outPut = null;
      try {
         byte[] buffer = new byte[2048];
         outPut = new GZIPOutputStream(new FileOutputStream(Destine + "Models.gz"));
         OutputStream out = new BufferedOutputStream(new GZIPOutputStream(outPut));
         long numWritten = 0;
         for (int id = 0; id < maxFiles; id++) {
            if (FileExists(Source + id + ".dat"))
               input = new FileInputStream(Source + id + ".dat");
            else
               continue;
            
            while ((bytesRead = input.read(buffer)) != -1) {
               numWritten += bytesRead;         
            }
         }
         out.write(buffer, 0, bytesRead);
         input.close();
         out.close();
      } catch (FileNotFoundException e) {
         e.printStackTrace();
      }
   }

Mas ta dando

java.lang.ArrayIndexOutOfBoundsException

Não, e eu já consegui, meu código não estava tão errado.
Obrigado