#java #arrays #exception #byte #bytearray
#java #исключение #байт #массивы
Вопрос:
Я пытаюсь использовать этот код на java:
try
{
String url = "http://url.com/file.ext";
InputStream myInputStream = getClass().getResourceAsStream(url);
ByteArrayOutputStream myByteArrayOutputStream = new ByteArrayOutputStream();
byte[] arrayOfByte = new byte[1024];
int i;
while ((i = myInputStream.read(arrayOfByte)) != -1)
{
myByteArrayOutputStream.write(arrayOfByte, 0, i);
}
}
catch (Exception e)
{
System.err.println(e);
System.err.println(e.getMessage());
System.err.println(e.getLocalizedMessage());
System.err.println(e.getCause());
System.err.println(Arrays.toString(e.getStackTrace()));
e.printStackTrace();
}
Он компилируется нормально, но выдает исключение, это вывод на консоль:
java.lang.NullPointerException
null
null
null
[myclass.init(myclass.java:32), sun.applet.AppletPanel.run(Unknown Source), java.lang.Thread.run(Unknown Source)]
java.lang.NullPointerException
at myclass.init(myclass.java:32) <- Line 32 is "while ((i = myInputStream....."
at sun.applet.AppletPanel.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Что может быть причиной исключения?
Ответ №1:
На самом деле, если взглянуть со второй стороны, ваше InputStream myInputStream = getClass().getResourceAsStream(url);
не имеет смысла, вместо этого используйте
Url url = new Url("http://url.com/file.ext");
UrlConnection urlCon = url.openConnection();
InputStream input = urlCon.getInputStream();
Это должно правильно захватывать байты
Комментарии:
1. 1 — это правильно, ЕСЛИ этот URL действительно правильный. Если это неправильно, вы все равно не получите эти байты. Я бы рекомендовал проверить InputStream перед его использованием.
Ответ №2:
InputStream
Явно равно нулю. Это единственный объект, который разыменован в этой строке.
getResourceAsStream()
использует загрузчик классов для поиска именованного ресурса в пути к КЛАССУ. Указанный вами URL-адрес гарантированно ОТСУТСТВУЕТ в вашем CLASSPATH, так что здесь нет никакой тайны.