有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在JSON中仅获取大型数组的第一个元素?

我一直在研究Gson库的流媒体实现。但是,我无法确定按照以下方式获取数组的第一个元素是否是一种好的做法。URL返回一个包含Json数组的InputStream

JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8"));
reader.beginArray();
Message message = new gson().fromJson(reader, Message.class);
reader.endArray(); // this line
reader.close();

我的问题就在旁边有评论的那一行。如果我只想得到第一个元素,我应该这样做吗

注意,这里我想知道代码的效率。代码直接复制自gson流媒体示例[经过一些修改以正确描述情况]

实际阵列非常大。这就是为什么我不能等待得到整个数组,然后再得到元素。因此,我希望在获得第一个元素后立即中断流程,然后关闭流

如果有更好的方法,也请向我推荐


共 (1) 个答案

  1. # 1 楼答案

    Note that here I want to know about the efficiency of the code

    那么,看看代码:)Source for JsonReader

    它做的和你期望的差不多。它使用提供的InputStreamReader,只读取完成操作所需的内容(在您的例子中,从JSON数组获取第一个对象)

    然而。。。当你调用endArray()。。。它将从流中读取,直到找到该数组的结束]。你实际上并不关心这个,当然也不想花时间从电线上读取所有数据。只要打电话close()

    因为您正在关闭JsonReader(以及底层流)。。。这差不多是你能得到的最好的了。您只从底层流中读取所需的数据,然后将其关闭

    根据评论编辑:您可以通过以下操作使您的案例美观整洁:

    public Message getFirstMessageFromArray(JsonReader reader) {
        reader.beginArray();
        return getMessageFromJson(reader);
    }
    
    public Message getMessageFromJson(JsonReader reader) {
        return new gson().fromJson(reader, Message.class);
    }
    

    当你想使用它时:

    JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8"));
    Message message = getFirstMessageFromArray(reader);
    reader.close();
    

    JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8"));
    Message message = getMessageFromJson(reader);
    reader.close();