当前位置: 首页 > 面试题库 >

java mp3 inputstream到字节数组?

凌智
2023-03-14
问题内容

在尝试说“ Google it”之前,我尝试过,发现了一些有趣的文章,但没有任何效果。

我需要将网站上的mp3文件转换为字节流,以后可以将其保存到本地文件中。

这是我的代码(最重要的部分):

Url url = new Url("someUrl");
URLConnection conn = url.openConnection();
byte[] result = inputStreamToByteArray(conn.getInputStream());
// .... some code here
byteArrayToFile(result, "tmp.mp3");

public byte[] inputStreamToByteArray(InputStream inStream){
    InputStreamReader in = new InputStreamReader(inStream):
    ByteArrayOutputStream baos = new ByteArrayOutputStream();

    int next = inStream.read();
    while (next > -1){
        baos.write(next);
        next = in.read();
    }

    byte[] result = baos.toByteArray();
    baos.flush();
    in.close();
    return result;
}

public void byteArrayToFile(byte[] byteArray, String outFilePath){
    FileOutputStream fos = new FileOutputStream(outFilePath);
    fos.write(byteArray);
    fos.close()
}

该代码编译没有错误。与网址的连接有效。它发送正确的响应。

问题出在转换中。在byteArrayToFile()之后,我还会以适当的长度在磁盘上获取新文件,但是我无法在任何播放器中播放它。它说长度为00:00,因此不会播放。

顺便说一句。我想避免任何第三方聚会。但是如果没有其他办法…


问题答案:

(顺便说一下,顺便提一下,您提供的代码 不会
没有错误地进行编译。您没有必需的异常处理,inputStream应该是InputStream,仅供初学者使用。)

这就是问题:

InputStreamReader in = new InputStreamReader(inStream):

您正在尝试从二进制流中读取内容,并将其转换为文本。这 不是 文字。对于诸如MP3文件之类的二进制数据,您不应与“ Reader”或“
Writer”有任何关系。

这是您的inputStreamToByteArray方法的外观(或使用Guava及其ByteStreams.toByteArray方法):

public byte[] inputStreamToByteArray(InputStream inStream) throws IOException {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    byte[] buffer = new byte[8192];
    int bytesRead;
    while ((bytesRead = inStream.read(buffer)) > 0) {
        baos.write(buffer, 0, bytesRead);
    }
    return baos.toByteArray();
}

请注意,我已将其留给 调用 以清理输入流。通常,任何获取流的人都会将其关闭-
IMO这样的方法本身将其关闭会有些奇怪。如果愿意,您可以这样做,但是可能在一个finally块中,这样就可以知道即使抛出异常也 总是 将其关闭。

请注意,如果有异常,以后您的“编写”代码也不会关闭文件。您应该养成始终以finally块关闭流的习惯。



 类似资料:
  • 问题内容: 我试图理解一个到字符串,一个的字符串表示形式到转换…我将我的转换成一个要发送的字符串,然后我希望我的Web服务(用python编写)将数据直接回显给客户端。 当我从Java应用程序发送数据时… 字节发送.. 发送(这是Arrays.toString()的结果,它应该是我的字节数据的字符串表示形式,该数据将通过电线发送): 在python端,python服务器将字符串返回给调用方(我可以

  • 如何在java中将字节数组转换为int。我正在构建蓝牙应用程序,我在其上收到字节数组中的消息,然后将其转换为字符串,它已成功转换,但我也希望它以整数形式存在

  • 问题内容: 我得到一个整数: 当我使用方法: 给出: 但我想要一个字节数组: 我该怎么做? 问题答案: 使用Java NIO的ByteBuffer非常简单: 输出:

  • 问题内容: 我正在尝试编写一个可以压缩数据的类。以下代码失败(不会引发异常,但目标.gz文件为空。) 此外:我不想像在所有示例中一样直接生成.gz文件。我只想获取压缩的数据,以便在将数据写入文件之前将其加密。 如果我直接写入文件,则一切正常: 但是,如果我想将其“旁路”到字节数组流,则不会产生单个字节- 始终为空。 问题答案: 问题是您没有关闭。在关闭它之前,输出将是不完整的。 您只需要 在 读取

  • 我看到很多人都有类似的问题,但我还没有试图找到我要找的东西。 因此,我有一个方法读取输入图像并将其转换为字节数组: 这是因为BufferedImage img为空。我认为这与我最初从BufferedImage到字节数组的转换中,信息被更改/丢失,因此数据不能再被识别为JPG有关。 有人对如何解决这个有什么建议吗?不胜感激。

  • 问题内容: 如何从某个包含数字,字母等的字符串中获取字节数组?如果您熟悉Java,那么我正在寻找与getBytes()方法相同的功能。 我尝试了如下代码段: 但没有成功,因此将不胜感激。 PS:为什么我完全需要这个!好吧,我需要通过fputs()将字节数组发送到用Java编写的服务器… 问题答案: @Sparr是正确的,但是我想您期望像C#中那样的字节数组。它与Sparr的解决方案相同,但是您希望