【发布时间】:2012-10-22 23:27:58
【问题描述】:
我有 java 服务器,我正在编写服务器从客户端读取命令,
C#编写的客户端通过socket以json字符串的形式发送命令。 命令看起来像这样
{
"command": "blah",
"key1": "value1",
"key2": "value3",
"key3": "value4",
}
json 字符串每次可能有不同数量的 key-val 对,因此没有静态计数来衡量 json 命令中的行数。
这是 C# 客户端如何将 json 字符串发送到 java 服务器
String json = JsonConvert.SerializeObject(map, Formatting.Indented);
streamWriter.WriteLine(json);
streamWriter.Flush();
我想在用android编写的java代码中读取json。它看起来如下所示,它可以正确读取 json 行,但在读取 json 命令的最后一行后会阻塞我不确定知道该命令已结束的体面方法是什么..
serverSocket = new ServerSocket(4444);
clientSocket = serverSocket.accept();
InputStream inStream = clientSocket.getInputStream();
InputStreamReader inStreamReader = new InputStreamReader(inStream);
BufferedReader buffReader = new BufferedReader(inStreamReader );
String input = "";
while((input = buffReader.readLine())!= null)
{
command += input;
}
//Does not get to this point, blocks above on the readLine after reading full json..
JSONObject jsObj = new JSONObject(input);
Object ovj = jsObj.get("command");
我知道我可以在发送 json 之前发送行数并在 while 循环中读取多次?但这看起来像一个肮脏的解决方案,请告知正确的方法。
谢谢, 艾哈迈德
【问题讨论】:
-
readLine 给了我一行(部分)json,例如 { for first readLine ..
-
是的,你是对的,就是这样.. Formatting.Indented 是问题所在。谢谢。如果您发布一个,我会接受它作为答案