Ive работает над приложением, которое работает с довольно низкоуровневой сетью, т.е. чтение byte[]
из входного потока и отправка byte[]
в выходной поток, где массивы байтов находятся в очень специфическом формате.Groovy - добавить явные массивы, т. Е. Массивы java
Теперь я написал много кода в предположении, что я могу просто добавлять массивы с +, который, как я только что узнал сейчас, не возможен - работает только с def a = []
, так как это список.
Это означает, что теперь мой проект полон кода, как
public byte[] getHeaderBytes(){
return MessageUtils.toBytesUINT(messageLength) + MessageUtils.toBytesUINT(messageType)
}
где метод также работает на добавление как
public static byte[] toBytesUINT(long... longs){
byte[] rv = new byte[0]
longs.each{
byte[] arr = Longs.toByteArray(it)
rv += arr[arr.size()-4 .. arr.size()-1]
}
return rv
}
(здесь им-хранение без знака имеет длину 4 байта целое в длинные, получение байты для длинного использования с помощью Guava, а затем получение 4 наименее значимых байтов, которые представляют беззнаковый int)
Теперь, мой вопрос: как мне обратиться к исправлению мой код с наименьшим количеством перезаписи и/или сделать это в элегантном стиле Groovy?
EDIT: после выполнения еще несколько тестов, он является возможно с массивом объектов, но не примитивные массивы, то есть с кодом
String[] testArray = ["A", "B", "C"]
String[] testArray2 = ["D", "E"]
println testArray + testArray2
Byte[] testArray5 = [0, 1, 2]
Byte[] testArray6 = [3, 4]
println testArray5 + testArray6
byte[] testArray3 = [0, 1, 2]
byte[] testArray4 = [3, 4]
println testArray3 + testArray4
выход
[A, B, C, D, E]
[0, 1, 2, 3 ,4]
Caught: groovy.lang.MissingMethodException: No signature of method: [B.plus() is applicable for argument types: ([B) values: [[3, 4]]
Possible solutions: use([Ljava.lang.Object;), is(java.lang.Object), split(groovy.lang.Closure), wait(), any(), size()
groovy.lang.MissingMethodException: No signature of method: [B.plus() is applicable for argument types: ([B) values: [[3, 4]]
Possible solutions: use([Ljava.lang.Object;), is(java.lang.Object), split(groovy.lang.Closure), wait(), any(), size()
at main.run(main.groovy:11)
Таким образом, было бы просто работа с Byte [] работает? Насколько опасно было бы бросать между Byte [] и byte []?
Если вы даете тип это будет Groovy массив, например, http://grails.asia/groovy-array-manipulation-examples. Это не полный ответ, но это начало. –
@DaveNewton отредактировал вопрос после некоторого тестирования – OsaSoft