编写字节数组时的java.lang.NullPointerException

时间:2011-06-09 00:13:20

标签: java arrays exception byte bytearray

我在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)

可能导致异常的原因是什么?

2 个答案:

答案 0 :(得分:3)

InputStream显然为空。它是唯一在该行被取消引用的对象。

getResourceAsStream()使用类加载器在CLASSPATH中搜索命名资源。您提供的URL保证不在您的CLASSPATH中,因此这里没有任何谜。

答案 1 :(得分:3)

实际上再看一下,你的InputStream myInputStream = getClass().getResourceAsStream(url);没有意义,而是使用

Url url = new Url("http://url.com/file.ext");
UrlConnection urlCon = url.openConnection();
InputStream input = urlCon.getInputStream();

那应该正确抓取字节