[英]Java InputStream NullPointerException with InputStream
我在课堂上有两种方法:
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块以确保适当关闭流。
捕获异常,将其写到标准输出中,然后一切正常就可以了,这几乎总是一个坏主意。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.