为什么在GSON中JsonWriter会抛出Incomplete document异常?

问题描述 投票:0回答:1

我想通过套接字流发送 json,但在关闭连接时我经常遇到此错误,我不知道为什么。 我试图关闭 JsonWriter,但收到 IOException,即使我从未使用过 JsonWritter。 这是有问题的例外情况:

Exception in thread "main" java.lang.RuntimeException: java.io.IOException: Incomplete document
    at Main.close(Main.java:34)
    at Main.socketTest(Main.java:23)
    at Main.main(Main.java:12)
Caused by: java.io.IOException: Incomplete document
    at com.google.gson.stream.JsonWriter.close(JsonWriter.java:610)
    at Main.close(Main.java:31)
    ... 2 more

这是服务器套接字的代码:

    public class Main {
    public static void main(String[] args) {
        Main main = new Main();
        main.socketTest();
    }

    Socket socket;
    JsonWriter jsonWriter;

    public void socketTest() {
        try (ServerSocket serverSocket = new ServerSocket(3030)){
            Socket socket = serverSocket.accept();
            this.socket = socket;
            jsonWriter = new JsonWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF-8"));
            jsonWriter.close();
            socket.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

客户端代码非常基本,它只是与服务器建立连接:

public class ClientTest {
    public static void main(String[] args) {
        ClientTest clientTest = new ClientTest();
        clientTest.connect();
    }

    public void connect() {
        try {
            Socket socket = new Socket("localhost", 3030);

        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

我希望任何人都可以帮助我,因为我已经为这个问题苦苦挣扎了好几天。

java json java-stream gson ioexception
1个回答
0
投票

“空”流或字符串对于

com.google.gson.stream.JsonWriter
类来说不是有效的 JSON 文档:

要将数据编码为 JSON,请创建一个新的

JsonWriter
。每个 JSON 文档必须包含一个顶级数组或对象。

因此您必须编写一个数组或对象,否则您会收到“文档不完整”错误消息,如close()

文档中所示:

投掷:

IOException
- 如果 JSON 文档不完整。

© www.soinside.com 2019 - 2024. All rights reserved.