Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中将音频字符串转换回音频字节_Java_String_Javasound - Fatal编程技术网

如何在java中将音频字符串转换回音频字节

如何在java中将音频字符串转换回音频字节,java,string,javasound,Java,String,Javasound,录制的音频字节与HTTP请求正文一起发送。当服务器端收到请求时,音频数据如下所示: \u0000\u0000\u0000\u0000\u0000\u0000��\u0002\u0000������4\u0000M\u0000@\u0000%\u0000\u0014\u0000����������\u0015\u0000M\u0000r\u0000�\u0000_\u0000C\u0000^\u0000V\u0000\u0007\u0000��\"\u0000;\u0000>\u0000\u

录制的音频字节与HTTP请求正文一起发送。当服务器端收到请求时,音频数据如下所示:

\u0000\u0000\u0000\u0000\u0000\u0000��\u0002\u0000������4\u0000M\u0000@\u0000%\u0000\u0014\u0000����������\u0015\u0000M\u0000r\u0000�\u0000_\u0000C\u0000^\u0000V\u0000\u0007\u0000��\"\u0000;\u0000>\u0000\u0005\u0000����������������\f\u0000+\u0000K\u0000e\u0000.\u0000������������\u0003\u0000\b\u0000����������\"\u0000G\u0000V\u0000(\u0000 \u0000\u0004\u0000����������\u0003\u0000W\u0000�\u0000Z\u0000a\u0000{\u0000,\u0000��������\u001E\u0000��������1\u0000\u001A\u0000\u0011\u0000(\u0000/\u0000\u0016\u0000��������0\u0000/\u00002\u0000;\u0000������d�������\u001F\u00009\u00006\u0000j\u0000[\u0000'\u0000������������\u000E\u00009\u0000%\u0000����\u0015\u0000(\u00003\u0000+\u0000'\u0000������<\u0000F\u0000=\u0000h\u0000�\u0000M\u0000��������������T\u0000i\u0000]

当我将字节FC,FF,FF,FF转换为字符串时,我得到����. 当我将字符串转换回字节时,我得到EF BF BD EF BF BD EF BF BD EF BF BD。我想从����.

字符串表示文本。音频数据不是文本。尽管您可以尝试,但不可能将某些音频数据插入字符串,然后尝试从字符串中提取音频数据。它被设计成不起作用

由于您要处理的音频数据不是文本,因此您没有理由在处理过程中使用字符串。忘记字符串吧,您现在知道它们不适合您的目标,所以完全不要使用它们。二进制数据(如音频)可以表示为字节序列。例如字节[]数组

删除变量
String testString
。不要构建它,不要声明它,完全删除它。这是一个字符串,你不能用字符串来实现你的目标,所以把它扔掉

相反,让我们关注如何使用变量
byte[]test
。它已经是一个字节[],包含所有数据。这就是你所需要的

您可以使用
System.out.write(test)编写它但在控制台中这不是很有用。在套接字的输出流中,这很完美

或者,您可以使用以下命令写出十六进制编码版本:

System.out.println(getHexString(test));

在这里,您将获得一个完整的功能结果。将它们解码回字节将为您提供开始时使用的字节。

这完全取决于编码、文件格式等细节,最重要的是:http请求的构建方式。请提供一个,现在您的问题是“你好,医生,我的猫发出奇怪的声音。现在告诉我她出了什么问题”。如果您可以在客户端发布用于生成HTTP请求的代码,也许有人可以帮助您。@GhostCat Hi,我刚刚编辑了我的问题。@user31601 Hi,我刚刚编辑了我的questionbyte,它是有符号类型。0xFF不是有效的字节!我同意,您在这里抓住了字符串的基本问题。但是,我们真的不知道这些音频数据是如何通过他的http请求传入的。换句话说:你解决了问题中那些事实上可以回答的部分。还有什么不清楚的…@幽灵猫当然。尽管如此,这一点仍然非常重要,值得强调:字符串是处理非文本二进制文件的错误工具。如果您正在使用非文本二进制文件,并且在某个时候将其放入字符串中,那么您就失败了,您的程序将无法工作。既然这是不可避免的结果,那么,除了文本之外,不要使用字符串。
����
EFBFBDEFBFBDEFBFBDEFBFBD
System.out.println(getHexString(test));