【问题标题】:Java IO copy video fileJava IO 复制视频文件
【发布时间】:2017-09-26 15:36:46
【问题描述】:
class HelloWorld {
    public static void main(String args[]) {
        File file = new File("d://1.mp4");
        FileInputStream fr = null;
        FileOutputStream fw = null;
        byte a[] = new byte[(int) file.length()];
        try {
            fr = new FileInputStream(file);
            fw = new FileOutputStream("d://2.mp4");

            fr.read(a);
            fw.write(a);
            fw.write(a);
            fw.write(a);
            fw.write(a);
            fw.write(a);

        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                fr.close();
                fw.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

这里我写了五次 fw.write(a),文件的大小增加到了 5 倍,但是原始的 1.mp4 和副本 2.mp4 的长度相同,即 3:30 分钟?

【问题讨论】:

  • 有趣。你的问题是?
  • 为什么两个文件的播放长度相同,即 3:30 分钟,而 1.mp4 的大小为 24.7 mb 而 2.mp4 的大小为 123mb?不会增加歌曲的播放时间吗..?
  • 简单地复制某些文件的字节并不一定意味着它在使用软件检查它们时只是复制了一些东西。例如,视频播放器可能会读取数据,直到遇到某个终端并且不向前看。然后,此终端将存在于第一个文件数据块的末尾。
  • 首先,MP4 格式不是这样工作的;您不能只是连接视频文件来制作更长的视频文件。其次,你没有检查read(a)的返回值。

标签: java io fileinputstream fileoutputstream


【解决方案1】:

简单地复制某些文件的字节并不一定意味着它在使用软件检查它们时只是简单地复制了一些东西。例如,视频播放器可能会读取数据,直到遇到某个终端并且不向前看。然后,此终端将存在于第一个文件数据块的末尾。

您可以用十六进制编辑器打开新文件,检查是否可以连续看到原始视频文件的数据五次。

【讨论】:

    【解决方案2】:
    FileOutputStream fooStream = new FileOutputStream("FilePath", false);
    

    这将覆盖内容并且创建的文件的大小将与原始文件的大小相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-23
      • 2011-01-31
      • 2011-07-11
      • 1970-01-01
      • 1970-01-01
      • 2012-01-26
      • 2017-10-02
      相关资源
      最近更新 更多