gpt4 book ai didi

android - android中输入流的空指针异常

转载 作者:行者123 更新时间:2023-11-29 22:10:47 24 4
gpt4 key购买 nike

private double [] readFile (InputStream _input) throws IOException {
DataInputStream audioInput = new DataInputStream (new BufferedInputStream (_input));

int musicLength = (int)(audioInput.available()/2.0);
double [] music = new double [musicLength];

int i = 0;
while (i < audioInput.available() && i < musicLength) {
music[i] = (double)audioInput.readShort();
i++;
}

audioInput.close();
return music;
}

这段代码是我正在进行的一个更大项目的一部分,该项目涉及比较两个音频信号的 DSP 技术。此代码应该返回包含音频文件中原始数据的双 [](InputStream _input 是表示调用 getResources().openRawResource(R.raw.audio_file) 的结果的参数>,并且不为空)。但是,当我运行代码时,出现空指针异常。堆栈跟踪的相关部分如下:

03-12 22:24:57.818: W/System.err(8931): java.lang.NullPointerException
03-12 22:24:57.818: W/System.err(8931): at android.content.res.AssetManager.getAssetRemainingLength(Native Method)
03-12 22:24:57.818: W/System.err(8931): at android.content.res.AssetManager.access$300(AssetManager.java:36)
03-12 22:24:57.818: W/System.err(8931): at android.content.res.AssetManager$AssetInputStream.available(AssetManager.java:552)
03-12 22:24:57.818: W/System.err(8931): at com.ashwin.iSleep.AudioRecorder.readFile(AudioRecorder.java:88)

根据堆栈跟踪,确切的错误发生在调用 audioInput.available() 时。据我所知,问题出在 native 方法 AssetManager.getAssetRemainingLength() 上。感谢您的帮助!

最佳答案

使用 grepcode.com ,您可以看到您提供了 AssetInputStreamreadFile 实例(派生自 InputStream)。 AssetInputStream.available 以成员 mAsset 作为参数调用 getAssetRemainingLength - 以及我们如何查看,例如,here ,如果 mAssert == 0,则抛出 NullException。但是在 grepcode 的源代码中,我们可以看到在构造函数 AssetInputStream 中,我们调用了 getAssetLength,它验证的是 mAsset也等于空值。这意味着 mAsset 在创建 AssetInputStream 实例后被取消。您可以从相同的grepcode.com 中看到页面,它会在您关闭 AssetInputStream 实例时发生。所以答案是 - 在调用 readFile 方法之前,您已经关闭了 _input

关于android - android中输入流的空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9678916/

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