В Java, как прочитать фиксированную длину из inputtream и сохранить в виде файла? - PullRequest
2 голосов
/ 02 ноября 2011

В Java, как прочитать фиксированную длину из входного потока и сохранить в виде файла?например.Я хочу прочитать 5M из inputStream и сохранить как downloadFile.txt или что-то еще. (BUFFERSIZE = 1024)

FileOutputStream fos = new FileOutputStream(downloadFile);
byte buffer [] = new byte[BUFFERSIZE];
int temp = 0;
while ((temp = inputStream.read(buffer)) != -1)
{
    fos.write(buffer, 0, temp);
}

1 Ответ

4 голосов
/ 02 ноября 2011

Два варианта:

  1. Просто продолжайте читать и писать, пока не достигнете конца ввода или не скопируете достаточно:

    byte[] buffer = new byte[1024];
    int bytesLeft = 5 * 1024 * 1024; // Or whatever
    FileInputStream fis = new FileInputStream(input);
    try {
      FileOutputStream fos = new FileOutputStream(output);
      try {
        while (bytesLeft > 0) {
          int read = fis.read(buffer, 0, Math.min(bytesLeft, buffer.length);
          if (read == -1) {
            throw new EOFException("Unexpected end of data");
          }
          fos.write(buffer, 0, read);
          bytesLeft -= read;
        }
      } finally {
        fos.close(); // Or use Guava's Closeables.closeQuietly,
                     // or try-with-resources in Java 7
      }
    } finally {
      fis.close(); 
    }
    
  2. Считать все 5M в память за один вызов, например, используя DataInputStream.readFully, а затем запишите это за один раз. Проще, но, очевидно, использует больше памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...