gpt4 book ai didi

Java InputStream NullPointerException 与 InputStream

转载 作者:行者123 更新时间:2023-12-01 15:52:36 27 4
gpt4 key购买 nike

我在一个类中有两个方法:

  private static InputStream getSongStream(String ip, String id){
try {
URL url = new URL("http://"+ ip + "/" + Client.streamphp);
URLConnection conn = url.openConnection();
conn.setDoOutput(true);

OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(data); //Data is a simple Http Post that is know to work
wr.flush();
wr.close();

return conn.getInputStream();

} catch (MalformedURLException badurl) {
System.out.println(badurl);
return null;
} catch (IOException noconnection) {
System.out.println(noconnection);
return null;
}
}

public static void downloadSong(String ip, String id, String path){
InputStream rd = Client.getSongStream(ip, id);
try {
OutputStream stream = new FileOutputStream(new File(path));

byte[] buffer = new byte[4096];
int len;
while ((len = rd.read(buffer)) > 0) { //Here I get NullPointerException
stream.write(buffer, 0, len);
}
stream.close();
rd.close();

} catch (IOException noconnection) {
System.out.println(noconnection);
}
}

第二种方法中注释的行是问题,如果我将所有内容都放在同一个方法中,我可以毫无问题地下载歌曲,但如果我将它们分开,则不会。

有什么想法吗?我希望将它们分开以重用 getSongStream。

最佳答案

问题是您在 getSongStream 中吞下了异常并返回 null。不要这样做 - 让异常传播,可能已经将其包装在另一种形式中......因此声明您的方法可以抛出(例如)IOException。您的 downloadSong 方法可能应该声明它也可以抛出 IOException 。请注意,您应该有finally block 来确保即使抛出异常也能正确关闭流。

捕获异常,将其写入标准输出,然后就好像一切正​​常一样继续进行,这几乎总是是一个坏主意。

关于Java InputStream NullPointerException 与 InputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5714102/

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