Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.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
当JSON包含非拉丁字符时,Java JSON解析器爬行速度变慢_Java_Javascript_Jquery_Json_Parsing - Fatal编程技术网

当JSON包含非拉丁字符时,Java JSON解析器爬行速度变慢

当JSON包含非拉丁字符时,Java JSON解析器爬行速度变慢,java,javascript,jquery,json,parsing,Java,Javascript,Jquery,Json,Parsing,我做了一些志愿者工作,帮助建立一个网站(但我的日常工作不是程序员/开发人员)。我现在需要实现一些非拉丁字符(例如,日语字符、格鲁吉亚字母表等)。客户端都是javascript(带有jQuery) 我使用jQuery$.post()将信息发送到服务器。法语的测试JSON如下所示: {"myName":"CLTest","myLang":"fr","myData":[{"same":"même","diff":"différent"}]} 对日本人来说是这样的: {"myName":"CLTest

我做了一些志愿者工作,帮助建立一个网站(但我的日常工作不是程序员/开发人员)。我现在需要实现一些非拉丁字符(例如,日语字符、格鲁吉亚字母表等)。客户端都是javascript(带有jQuery)

我使用jQuery$.post()将信息发送到服务器。法语的测试JSON如下所示:

{"myName":"CLTest","myLang":"fr","myData":[{"same":"même","diff":"différent"}]}
对日本人来说是这样的:

{"myName":"CLTest","myLang":"ja","myData":[{"same":"同じ","diff":"異なる"}]}
等等。当使用英语、法语(包括口音,如上所述)或类似语言时,一切正常。服务器返回一个适当的JSON,然后正确显示。对于日语、格鲁吉亚语或类似的条目,Java服务器处理JSON大约需要5分钟。我不知道怎么弄明白为什么会出现这种减速

如果我注释掉JSON解析代码并返回一个新的JSON,一切都很好。但当我试图解析包含日语或类似非拉丁字符的JSON时,就会出现巨大的延迟。我尝试了两种不同的解析器(json.org和simple json),但都有这个问题。大约5分钟后,我可以看到Java应用程序已经完成了代码的处理,并且有一个合适的JSON要发送回去,但此时我收到了一个断管错误

还有一些细节:该帖子由Apache接收,Apache使用ProxyPass和ProxyPassReverse转发到Java应用程序并返回响应。Java应用程序通过设置为使用UTF-8的inputstream读取器读入,并通过DataOutputStream发回应答,再次使用UTF-8编码写入字节。服务器是MacOS 10.8服务器


我的问题是,我不知道下一步该往哪里看,看看到底发生了什么。我是否应该尝试另一个JSON解析库?我自己滚?我是否遗漏了某些设置?

如果您能够调试,您是否可以发送一个需要5分钟的请求,然后“暂停”查看卡在哪里?也许。。。下载Jar代码并将文件链接到它(假设您使用的是Eclipse或您拥有此功能)来帮助您完成这项工作。我只是使用命令行javac来编译,java来运行。这非常奇怪。您需要隔离显示问题的最小代码部分。例如,如果从文件而不是从web请求读取JSON数据,是否仍然会出现问题?如果你尝试用非拉丁语文本而不是将其解码为JSON,问题还会发生吗?我最终找到了这个问题,并认为我应该向我的新手承认错误:我摆脱了越来越多的代码,直到我发现我混淆了字节和字符:内容长度是以字节为单位报告的,但当使用
c=informclient.read时(buffer,01024)
为了获取JSON的内容,我将
c
(读取的字符数)与内容长度(字节数)进行了比较。噢!对于日语,字符数小于字节数,因此循环不会结束。解决了这个问题。