Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 读取和写入JSON流_Java_Json_Sockets_Gson - Fatal编程技术网

Java 读取和写入JSON流

Java 读取和写入JSON流,java,json,sockets,gson,Java,Json,Sockets,Gson,我正在尝试使用gson库直接从套接字流读写JSON 我有一个基类,所有消息都来自该基类: abstract class MessageBase { public String type = this.getClass().toString(); } 例如: class RequestMessage extends MessageBase { public String request = "my request"; } 我想做的是有以下方法: MessageBase read

我正在尝试使用
gson
库直接从套接字流读写JSON

我有一个基类,所有消息都来自该基类:

abstract class MessageBase
{
    public String type = this.getClass().toString();
}
例如:

class RequestMessage extends MessageBase
{
    public String request = "my request";
}
我想做的是有以下方法:

MessageBase readMessage(Reader reader);
void writeMessage(Writer writer, MessageBase message);
他们直接从流中读写

这将允许我调用以下内容:

writeMessage(myWriter, (MessageBase) (new RequestMessage()))

我希望我希望实现的目标是有意义的,这可能吗


如有任何意见,将不胜感激。谢谢

当然可以。您在实现方面遇到了什么问题?我没有实现。目前,我通过以消息长度为前缀的管道发送JSON消息。将整个消息读入字符串并使用
Gson.fromJson()
反序列化,但我需要事先知道类型。好的,Gson已经可以直接从流中准备好了(也就是说,您不需要在流中发送消息长度)。您可以使用类型适配器处理多态序列化/反序列化。如上所述。@Perception感谢链接帮助我解决了问题。这里的协议是什么。Perception已经回答了我的问题?Perception应该将他的评论作为一个答案发布,你接受它。
MessageBase message = readMessage(myReader);

if (message instance of RequestMessage)
{
    RequestMessage request = (RequestMessage) message;

    // do something here
}