记录一次封装对象时的空指针异常

20 阅读1分钟

说明:本文介绍一次封装对象时的空指针异常

场景

项目有一个定时任务,会去获取sftp服务器上的json文件,下载,解析,在封装成对象时返回了null,代码片段如下(已脱敏)

private static String getJsonObject(String fileName) throws Exception {
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    // 省略:下载sftp文件,到byteArrayOutputStream里
    return JSON.parseObject(new ByteArrayInputStream(byteArrayOutputStream.toByteArray()), String.class);
}

分析&解决

我将sftp上的json文件下载下来看了,内容没有问题。然后对比能解析成功的json文件,发现了问题,如下:

在这里插入图片描述

两个文件的字符编码不一样,UTF-8的能解析成功,ANSI的不能。因为上面代码是针对UTF-8的,在下载文件,写入到byteArrayOutputStream是乱码的,在转为String类型时就返回了null。


解决方法:更改文件的字符集编码,或将代码改成如下:

private static String getJsonObject(String fileName) throws Exception {
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    // 省略:下载sftp文件,到byteArrayOutputStream里
    return baos.toString();
}

不用JSON.parseObject(),直接toString(),能返回数据,但是文字是乱码的。

首次发布

hezhongying.blog.csdn.net/article/det…