gpt4 book ai didi

java - InputStreamReader, FileInputStream 在中点开始解析文件而不是开始

转载 作者:行者123 更新时间:2023-11-29 09:16:10 24 4
gpt4 key购买 nike

我正在尝试解析一个 UTF 16 编码的 JSON 文件,但是我遇到了一个奇怪的问题。

每当我使用 FileInputStream 时,解析文件似乎都从中点开始。例如,如果文件的长度为 40 个字符,它将从字符 20 开始。这会导致解析 JSON 时出错,因为显然它的数据在文件中从字符 0 开始。

尽管工作了数周,但前几天还是出现了这个问题。我看不出我的代码有任何问题,因为它在问题开始前的几天没有更改。

我尝试的解决方法之一是切换到使用 FileReader。它通常从字符零开始,但它无法处理文档中的 UTF-16 字符,因此无法解决问题。

我正在使用 Google 的 Gson 库来处理 JSON,但我认为问题出在 InputStreamReaderFileInputStream 中的某处。

下面是有问题的代码;

JsonReader reader = new JsonReader(new InputStreamReader(new FileInputStream(file), "UTF-16"));
reader.beginArray();
...

这是它抛出的错误。上面的 reader.beginArray(); 行导致异常。

java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 21
at com.google.gson.stream.JsonReader.expect(JsonReader.java:337)
at com.google.gson.stream.JsonReader.beginArray(JsonReader.java:304)
at reader.ProofDatabase.load(ProofDatabase.java:130)
...

这是我不处理 UTF16 字符串的部分解决方法

JsonReader reader = new JsonReader(new FileReader(file));
reader.beginArray();
...

任何解决方案,无论是对原始问题的修复,还是以 UTF-16 格式读取文件的其他方法,我们都非常欢迎。

最佳答案

当我找到解决方案时忘记更新问题。

错误来自于我手动创建 JSON 文件而不是通过编程生成它。

当文件由 JSONWriter 类生成时,额外的元数据被添加到文件中,告诉解析器这是一个 JSON 文件。手动创建的文件中缺少此元数据,因此 JSONReader 在解析文件时抛出错误。

关于java - InputStreamReader, FileInputStream 在中点开始解析文件而不是开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9331436/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com