For some JSON:
{
"id":123,
"name":"Test",
"sub_object":{
"sub_field_1":1,
"sub_field_2":2,
"sub_field_array":[
{
"array_field_1":true,
"array_field_2":false
},
{
"array_field_1":false,
"array_field_2":true
}
],
"sub_sub_object":{
"field_1":"me",
"field_2":"myself",
"field_3":"i",
}
}
}
Run Code Online (Sandbox Code Playgroud)
I want to apply a tree-like list of field names. This could probably be expressed in JSONPath:
root
|-id
|-sub_object
|-sub_field_2
|-sub_field_array
|-array_field_1
|-sub_sub_object
Run Code Online (Sandbox Code Playgroud)
Then I should get back something like:
{
"id":123,
"sub_object":{
"sub_field_2":2,
"sub_field_array":[
{
"array_field_1":true
},
{
"array_field_1":false
}
],
"sub_sub_object":{
"field_1":"me",
"field_2":"myself",
"field_3":"i",
}
}
}
Run Code Online (Sandbox Code Playgroud)
The idea is that, …
我有一个用户上传图像的Web应用程序.我们通过ImageIO.read()验证图像数据,并在生成的BufferedImage上执行一些简单的转换,然后将其保存到磁盘.
在执行负载测试时,我们意识到当许多请求同时进入时,它们在ImageIO.read()调用中被阻止.深入挖掘,我们注意到JPEGImageReader是同步的,并且一次只创建一个BufferedImage.
还有其他人遇到过这个吗?我已经谷歌搜索了几天,并没有遇到有这个问题的另一个人,所以也许我做错了什么.我无法想出为什么会这样.对于某些内存泄漏问题,似乎无法为每个映像创建单独的读者和写入器,但这种解释对我来说似乎相当薄弱.
编辑:这是一个性能工具,打破了这么长时间.我相信这是由于所有线程都在等待同步锁定,JPEGImageReader源码.
编辑:JAI库可以工作,除了OpenJDK已经删除了对它的关键部分的支持,明确地是JPEG编解码器.
解决方案:考虑到我花费大量时间寻找替代解决方案并且未能这样做,我最好的解决方案是根据请求异步处理图像.因此,当请求进入时,原始图像数据被存储为所谓的有效图像; 然后,请求线程之外的异步进程将一次处理一个图像.由于ImageIO库的同步性,尝试一次执行多个操作没有任何好处.考虑到库不是同步的,只能是低效的,可以并行处理图像.
虽然异步处理会增加一定程度的复杂性,但在修改图像方面可能是一个好主意.不起作用的是我们无法在每个请求中处理原始图像,这意味着我们的系统必须假设每个图像都是有效的图像数据.当异步处理器确实处理图像时,如果数据不好,可能会出现系统不一致的情况.