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

发布于 2024-12-13 00:19:25 字数 327 浏览 1 评论 0原文

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

In java, how to read a fixed length from the inputstream and save as a file?
eg. I want to read 5M from inputStream, and save as downloadFile.txt or whatever.(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);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

智商已欠费 2024-12-20 00:19:25

两个选项:

  1. 继续阅读和写作,直到到达输入的末尾或复制了足够的内容:

    byte[]缓冲区=新字节[1024];
    int 左字节数 = 5 * 1024 * 1024; // 或者其他什么
    FileInputStream fis = new FileInputStream(输入);
    尝试 {
      FileOutputStream fos = new FileOutputStream(输出);
      尝试 {
        while (bytesLeft > 0) {
          int read = fis.read(buffer, 0, Math.min(bytesLeft, buffer.length);
          如果(读取==-1){
            throw new EOFException(“数据意外结束”);
          }
          fos.write(缓冲区, 0, 读);
          bytesLeft -= 读取;
        }
      } 最后 {
        fos.close(); // 或者使用Guava的Closeables.closeQuietly,
                     // 或 Java 7 中的 try-with-resources
      }
    } 最后 {
      fis.close(); 
    }
    
  2. 一次调用将所有 5M 数据读入内存,例如使用 DataInputStream.readFully< /code>,然后一口气写出来。更简单,但明显占用更多内存。

Two options:

  1. Just keep reading and writing until you either reach the end of the input or you've copied enough:

    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. Read all 5M into memory in one call, e.g. using DataInputStream.readFully, and then write it out in one go. Simpler, but obviously uses more memory.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文