所以我拥有所有这些byte [],并且它们的编码可能是许多不同格式中的一种,具体取决于我当前正在调试的位置。我希望能够将字节数组的投影列表组合在一起。我正在使用IntelliJ的数据类型呈现器视图,应用渲染器来键入byte [],我主要关注表达式列表框。
所以我已经看到了如何使用表达式new String(this)
呈现节点,但是这在下面的表达式列表视图中不起作用。最终我想做new String(this, "UTF16")
之类的表达式(或转换为十六进制或base64或w / e),但this
似乎不是表达式列表框中的byte [] - 事实上,当我尝试类似(byte[])this
进行类型转换时,结果显示为Inconvertible types; cannot cast '_Dummy_.__Array__≤T≥' to 'byte[]'
(java.lang.Byte []的行为相同)。这真是奇怪的行为,在一个地方它是一个字节[]而在另一个地方它是一些不透明的内部类型。
工作只是显示字段 - 即像this.length
这样的表达式按预期工作。此外,像this
这样的表达式只是重新呈现节点,声称其类型为byte [],其对象id与原始id相同。
答案 0 :(得分:0)
我回答了similar question here。有关无法将ScrollableControlDesigner
强制转换为_Dummy_.__Array__<T>
的消息听起来像是一个IntelliJ错误,它无法确定调用堆栈中类的名称。也许为byte[]
的其他“形式”添加DTR会有所帮助。我在下面列出了三个DTR的示例 - byte[]
,byte[]
和Byte[]
。
测试和帮助器方法(用Groovy编写,所以确保它在你的类路径上或用纯Java重写):
ArrayList
对于您要定义的每个DTR,只需将上面定义的确切字符串复制到渲染节点时&gt;使用以下表达式字段。我建议将实用程序方法放在类路径的源类而不是测试中,因为每次构建都需要在DTR对话框中重新导入测试类,因为@Test
void testShouldHandleDTR() {
// Arrange
byte[] primitiveArray = "90abcdef".bytes
Byte[] objectArray = "90abcdef".bytes
List<Byte> objectList = "90abcdef".bytes
final String EXPECTED_STRING = Hex.encodeHexString(primitiveArray)
logger.info("Expected hex string: ${EXPECTED_STRING}")
// Fully qualified for DTR dialog
String primitiveDTR = "org.bouncycastle.util.encoders.Hex.toHexString(this);"
String objectArrayDTR = "org.example.ThisTest.encodeObjectArrayToHex(this);"
String objectListDTR = "org.example.ThisTest.encodeObjectArrayToHex(this.toArray());"
def types = [primitiveArray, objectArray, objectList]
def expressions = [(primitiveArray.class.name): primitiveDTR,
(objectArray.class.name): objectArrayDTR,
(objectList.class.name): objectListDTR]
// Act
types.each { it ->
logger.info("Contents: ${it}")
logger.info("Type: ${it.class.name}")
String result = Eval.x(it, expressions[it.class.name].replaceAll(/this/, "x"))
logger.info("Result: ${result}")
// Assert
assert result == EXPECTED_STRING
}
}
public static String encodeObjectArrayToHex(Object[] objectArray) {
byte[] primitiveArray = objectArray.collect { it as byte }
Hex.encodeHexString(primitiveArray)
}
被清除了。