gpt4 book ai didi

java - 使用 Java 无法正确复制文件

转载 作者:行者123 更新时间:2023-12-05 09:23:06 24 4
gpt4 key购买 nike

我写了一个小程序,它只读取文件内容并将其写入新副本。这对文本文件非常有效,但对于 PNG 和视频文件,它无法正确创建文件(图像全黑或视频无法播放)。我知道有些 API 可以用一行复制文件,但我很想知道为什么这不起作用。这是代码:

import java.io.*;

public class CopyFile
{
public static void main(String[] args) throws Exception
{
File file = new File("test.mp4");
File copy = new File("copy.mp4");

InputStreamReader input = new InputStreamReader(new FileInputStream(file));
OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(copy));

System.out.println(input.ready());

while(input.ready())
{
int i = input.read();
//System.out.print( (char) ( (byte) i));
out.write(i);
}

input.close();
out.flush();
out.close();
}

最佳答案

  1. 不要使用ReaderWriter 除非您知道输入是文本。使用 InputStreamOutputStream。
  2. 不要使用 ready(), 或者,为了 Sotirios 的利益,也不要使用 available()。它们都不是流结束的有效测试。它们都关心是否可以无阻塞地读取输入,这根本不是一回事。请参阅 Javadoc。
  3. 您没有正确检测到流结束。如果 read() 返回 -1,您仍在将其复制到输出。
  4. 一次复制单个字符或单个字节非常慢。

Java中复制流的规范方式如下:

while ((count = in.read(buffer)) > 0)
{
out.write(buffer, 0, count);
}

其中 count 是一个 int,buffer 是一个大于零的任意大小的 byte[] ,通常为 8192。

关于java - 使用 Java 无法正确复制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24235493/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com