2

Javaで、入力ストリームから固定長を読み取り、ファイルとして保存するにはどうすればよいですか?例えば。inputStreamから5Mを読み取り、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);
}
4

1 に答える 1

5

2つのオプション:

  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. を使用するなど、1回の呼び出しですべての5Mをメモリに読み込み、一度DataInputStream.readFullyに書き込みます。より単純ですが、明らかにより多くのメモリを使用します。

于 2011-11-02T06:27:56.087 に答える