String.getBytes()抛出Nullpointerexception

时间:2014-08-24 23:36:57

标签: java string byte bufferedreader

我正在尝试逐行读取文件并将其保存到字节数组中,但由于某种原因,String.getBytes()会抛出Nullpointer异常。

我做错了什么?

public static void main(String[] args) {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    byte[][] bytes = null;
    try {
        String data;
        int i = 0;
        while((data = br.readLine()) != null) {
            bytes[i] = data.getBytes(); // THROWS A NULLPOINTER EXCEPTION HERE
            i++;
        }
        System.out.println(bytes.length);

    } catch (IOException e)
        e.printStackTrace();
    }

}

3 个答案:

答案 0 :(得分:2)

您的字节数组bytes为空。为什么不使用ArrayList

ArrayList<byte[]> bytes = new ArrayList<>();

然后在你的代码中:

bytes.add(data.getBytes());

答案 1 :(得分:1)

当您尝试分配bytes null时,问题是byte[][] bytes = new bytes[N][]; (您从未实例化过它!)。试试这个:

bytes

在填充之前,您必须在N矩阵中指定至少行数。我不知道byte[][]的价值应该是什么,如果在循环开始时它未知,那么我们就不能使用{{1}用于存储结果 - 在这种情况下,需要一个可变长度的数据结构,例如ArrayList<byte[]>可以解决这个问题:

String data;
List<byte[]> bytes = new ArrayList<byte[]>();
while ((data = br.readLine()) != null) { // we don't need `i` for anything
    bytes.add(data.getBytes());
}
System.out.println(bytes.size());        // this prints the number of rows

答案 2 :(得分:1)

这是因为您从未将bytes初始化为除null之外的任何内容:

 byte[][] bytes = null;