将 .wav 文件转换为二进制文件,然后再转换回 .wav?
Posted
技术标签:
【中文标题】将 .wav 文件转换为二进制文件,然后再转换回 .wav?【英文标题】:Convert .wav file to binary and then back to .wav? 【发布时间】:2011-06-15 13:26:21 【问题描述】:我正在用 java 做一个项目,需要我加密一个波形文件。那么,是否有一个直接的过程将波形文件转换为二进制文件并返回?我将对二进制数据应用加密算法。
【问题讨论】:
我的意思是位.... 1 和 0 的系列 @Uday:是的,我意识到了!我的意思是,您希望该二进制文件代表什么?文件已经是一系列 1 和 0。为什么不能直接将文件读入byte[]
?为什么它特别是 .wav 文件很重要?
将二进制文件读入 char 数组可能是一件非常愚蠢的事情。
@jarnbjo:是的,我的错。我的意思是byte
数组...
您会发现计算机中的大多数东西已经是二进制的。 :)
【参考方案1】:
是的。
File file = new File("music.wav");
byte[] data = new byte[file.length()];
FileInputStream in = new FileInputStream(file);
in.read(data);
in.close();
//encrypt data
FileOutputStream out = new FileOutputStream(file);
out.write(data);
out.close();
当然假设在您使用数据后它仍然是一个有效的 wav 文件。
【讨论】:
无法保证 in.read(data) 会读取所有文件。 download.oracle.com/javase/6/docs/api/java/io/… 声明它将读取 最多 b.length 个字节。 是的,但这假设数组不够大,事实就是如此。 File.length() 是文件的长度。但是,如果您要小心,可以将 read 返回的值与文件的大小进行比较以确定。 @Trey - 不,它与数组的大小无关。它与流实现有关。你应该永远假设read()
会填满你的数组。
谢谢!!这有效! :) 到目前为止,我一直在不必要地干预 AudioInputStream!
@Uday Kanth - 是的,您应该担心 read() 没有读取完整的文件。它可能适用于小文件,可能适用于较大的文件,但不能保证。您可以循环阅读或使用commons.apache.org/io/api-1.3.2/index.html IOUtils 之类的内容。【参考方案2】:
大多数语言都有以二进制模式读写文件的实用程序。如果你碰巧在 Linux 系统上,它和字符模式是一样的。无论如何,这不是“转换”为二进制的问题,只是一种不同的读取方法。
【讨论】:
【参考方案3】:试试Java Wav IO 库。
【讨论】:
【参考方案4】:你可以试试这个插件:JLayer
【讨论】:
以上是关于将 .wav 文件转换为二进制文件,然后再转换回 .wav?的主要内容,如果未能解决你的问题,请参考以下文章