Java Intellij中的数据类型渲染器?

Java Intellij中的数据类型渲染器?,java,intellij-idea,Java,Intellij Idea,最近转换为Intellij。Eclipse在调试器中有一个特性“原语显示选项”,其中调试器以十六进制和ascii值呈现原语 由于到目前为止Intellij中的一切都是轻而易举的事情,我认为这是一件不需要动脑筋的事情,但是在一个小时之后,经过大量非功能数据类型的渲染,我发现自己已经准备好爬回eclipse了。我制作了一些效果很好的渲染器,但只适用于对象,所以我只能得出结论,渲染器似乎不适用于基本体。有人能给我指一下正确的方向吗 编辑:我已经看到了在默认渲染中选择十六进制的选项,但我希望得到的不仅

最近转换为Intellij。Eclipse在调试器中有一个特性“原语显示选项”,其中调试器以十六进制和ascii值呈现原语

由于到目前为止Intellij中的一切都是轻而易举的事情,我认为这是一件不需要动脑筋的事情,但是在一个小时之后,经过大量非功能数据类型的渲染,我发现自己已经准备好爬回eclipse了。我制作了一些效果很好的渲染器,但只适用于对象,所以我只能得出结论,渲染器似乎不适用于基本体。有人能给我指一下正确的方向吗

编辑:我已经看到了在默认渲染中选择十六进制的选项,但我希望得到的不仅仅是每个变量需要单击两次的解决方案。

对于整数值(即,既不是浮点值也不是布尔值),您可以通过右键单击调试器中的原语并选择“查看为”->“十六进制”


默认情况下,“数据类型渲染器”功能仅适用于对象,而表示原语的唯一现实方式是以其整数值或十六进制表示,因此我认为这是一个很好的折衷办法。

我的解决方案是使用以下表达式为
字节[]
提供自定义数据类型渲染器:
新字符串(hex.encode>)(此选项);

默认情况下,只要数据类型呈现器处于启用状态(在应用程序重新启动时保持状态,等等)。如果您愿意,您可以添加更精细的字符串格式(我通常有一个实用程序类,它可以进行进一步的格式设置,我只是从DTR表达式字段调用它)


这类似于Andy的解决方案,但不要求您定义
Hex
类(他甚至没有提到)。仅适用于Java8项目(即目前不适用于Android)

必须使用以下表达式为
字节[]
(请参阅)提供自定义数据类型渲染器:

它将格式化数据,使其“01020304 05060708 09”,即按四个字节分组并用空格分隔。仅显示前80个字节,如果有更多字节,则添加省略号。

在数据视图的选项下,有一个选项(复选框)永久更改所有原语以显示为十六进制。请参阅:

设置生成、执行、部署调试器数据视图>

“显示原语的十六进制值”

我制作了一些效果不错的渲染器,但只针对对象,所以我可以 只能得出结论,渲染器似乎不适用于基本体

使用IDEA 2016.3,最终可以为基本类型(包括数组)定义自定义Java数据类型呈现器

您还可以尝试使用基于IntelliJ的IDE,它可以在调试器中为字节数组显示具有典型十六进制+文本预览的窗口


插件在Settings/Plugins/Browse repositories/Search for DeltaHex

Hmm中提供。这是IDE的一个有趣功能,在我发现您的问题之前,我不知道也不想使用它。我将对此进行研究,看看它能提供什么。不过,坦率地说,调试器中原始值的默认视图是这真的是我见过的最好的,即使是在与Eclipse和Netbeans进行比较之后。谢谢!这对于我所做的一些文件格式反转和ByteBuffer类型的工作来说是非常宝贵的。在Eclipse中,我可以检查字节数组或底层ByteBuffer,并且可以立即看到正在读取或写入的数据中的ascii或字节模式。这几乎可以进行切换g to intellij对我来说是个新手。对我来说也是一样,我真的需要这个功能来进行低级调试。我还花了好几个小时摆弄intellij自定义渲染器:-(我应该提到,我也发现了该功能,但我不想每次想看到十六进制值时都要切换它。我甚至希望找到一些东西来启用它作为默认值,但没有找到。尽管我不喜欢它,但手动切换该功能似乎是我实现该功能的唯一方法。@Kyle,请参见设置>生成、执行、部署>调试器>数据视图>Java>
“为原语显示十六进制值”
这是一个接近的解决方案,但它仍然很笨拙(对于长数组来说,大多数情况下不可用)Hex类来自哪个库?在rt.jar中找不到。在本例中,它可能是我编写的自定义类,但commons codec或BouncyCastle中的任何Hex转换器类只要在类路径上就可以工作。我的代码与屏幕截图中的完全相同,但与屏幕截图中的字节[]相同标记为红色,intellij抱怨意外标记。在表达式中,它抱怨“this”"使用
这个
关键字。我知道了!他引用的十六进制类可能是Shiro或apache commons项目中的一个,很多项目在类路径上已经有了这个类。这对我不起作用:无法计算表达式Lambdas计算不支持使用Java数据类型渲染器对于基本类型,我可以使用这个表达式来查看所有整数的十进制和十六进制值:this+“[”+String.format(“0x%08x”,this)+“]”虽然这个链接可以回答这个问题,但最好在这里包含答案的基本部分,并提供链接供参考。如果链接页面发生变化,只有链接的答案可能会无效。-普希金:添加了如何安装插件的方法。但我相信答案之前已经是描述性的。也许你没有注意到答案的文本在图像链接被图像替换之前?
IntStream.range(0,Math.min((this.length+3)/4,20)).mapToObj(i->IntStream.range(i*4,Math.min(i*4+4,_this.length)).mapToObj(i1->String.format("%02x",_this[i1])).collect(Collectors.joining())).collect(Collectors.joining(" "))+(this.length>80?"...":"")