java - 在java中,如何从输入流中读取固定长度并保存为文件?

标签 java inputstream outputstream fileinputstream fileoutputstream

在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);
}

最佳答案

两个选项:

  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,然后一口气写出来。更简单,但显然使用更多内存。

关于java - 在java中,如何从输入流中读取固定长度并保存为文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7976332/

相关文章:

java - 在 Java 中将不同的对象发送到服务器

java - 解析多个模式的 InputStream

java - 比较两个String数组并在Java中返回比较

C# 相当于 file_get_contents (PHP)

java - Spring 的 @Autowired 没有注入(inject) Map - 我是否正确使用它?

java - 我需要刷新 servlet 输出流吗?

java - log4j框架中Max Backup Index的理解

android - 将位图保存到 SD 卡

java - 从客户端选择创建实例 -java

java - 在 JSP 中生成 Excel 并通过电子邮件发送工作表