gpt4 book ai didi

java - java中使用bufferedstream复制时的数据大小差异

转载 作者:太空宇宙 更新时间:2023-11-04 13:36:26 26 4
gpt4 key购买 nike

当我在java中使用bufferedstream复制文件时,复制的文件看起来与原始文件相比有大小差异。为什么会发生这种情况? (但是,文件完美运行)

这是我的代码:

fileIn = new FileInputStream("guitar_sim.mp3");
bufferIn = new BufferedInputStream(fileIn);
fileOut = new FileOutputStream("test_song1.mp3");
bufferOut = new BufferedOutputStream(fileOut);

//int data = 0;
byte[] data = new byte[1000];
long startT = System.currentTimeMillis();
System.out.println(Calendar.getInstance().getTime());
while((bufferIn.read(data))!=-1) {
bufferOut.write(data);
}
long endT = System.currentTimeMillis();
System.out.println(Calendar.getInstance().getTime());
System.out.println(endT-startT);

输出:

Mon Jul 27 15:56:52 KST 2015
Mon Jul 27 15:56:53 KST 2015
102

原始数据大小:2871KB (guitar_sim.mp3)
复制数据大小:2868KB (test_song1.mp3)

最佳答案

顺便说一句,更好的方法是使用 try-resource 。它会自动调用最终的刷新和关闭。

现在解决你的问题。 read 方法返回已读取到缓冲区的字节数。事实上,您向 OutputStream 写入了太多字节。这是一个可能的解决方案:

try (InputStream is = new FileInputStream("guitar_sim.mp3");
OutputStream os = new FileOutputStream("test_song1.mp3")) {
byte[] data = new byte[2048];
int size;
while ((size = is.read(data)) != -1) {
os.write(data, 0, size);
}
} catch (IOException e) {
e.printStackTrace();
}

您还可以使用NIO通过 Files#copy(Path, Path) 复制文件.

关于java - java中使用bufferedstream复制时的数据大小差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31647062/

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