Наконец-то получил ответ, предоставленный , для изменения переменной сценария из Closure в Groovy ; был настолько сосредоточен на Дженкинсе, как виновнике, что я никогда не пытался попробовать сценарий в Groovy.
Замена changeAVar на
getMetaClass().setProperty(this, "aVar", newAVar)
работает отлично.
Демонстрация:
node() {
a = load ("path/to/file")
println("Printing ${a.aVar.toString()}") //This prints "[]"
a.changeAVar("b")
println("Printing ${a.aVar.toString()}") //This prints "[b]"
a.changeAVar2("c")
println("Printing ${a.aVar.toString()}") //This prints "c"
println("Printing ${aVar}") //This fails
}
В пути / к / файлу:
import groovy.transform.Field
@Field def aVar = []
def changeAVar(newAVar){
aVar.add(newAVar)
}
def changeAVar2(newAVar){
getMetaClass().setProperty(this, "aVar", newAVar)
}
return this
Можно превратить ints в байт [] использование DataOutputStream, как это:
ByteArrayOutputStream baos = new ByteArrayOutputStream ();
DataOutputStream dos = new DataOutputStream (baos);
dos.writeInt (i);
byte[] data = baos.toByteArray();
// do encryption
Затем дешифровать его позже:
byte[] decrypted = decrypt (data);
ByteArrayInputStream bais = new ByteArrayInputStream (data);
DataInputStream dis = new DataInputStream (bais);
int j = dis.readInt();
Просто используйте NIO. Это разработано для этой определенной цели. ByteBuffer и IntBuffer сделают то, в чем Вы нуждаетесь быстро, эффективно, и изящно. Это обработает большое/с прямым порядком байтов преобразование, "прямые" буферы для высокопроизводительного IO, и можно даже смешать типы данных в буфер байта.
Преобразуйте целые числа в байты:
ByteBuffer bbuffer = ByteBuffer.allocate(4*theIntArray.length);
IntBuffer ibuffer = bbuffer.asIntBuffer(); //wrapper--doesn't allocate more memory
ibuffer.put(theIntArray); //add your int's here; can use
//array if you want
byte[] rawBytes = bbuffer.array(); //returns array backed by bbuffer--
//i.e. *doesn't* allocate more memory
Преобразуйте байты в целые числа:
ByteBuffer bbuffer = ByteBuffer.wrap(rawBytes);
IntBuffer ibuffer = bbuffer.asIntBuffer();
while(ibuffer.hasRemaining())
System.out.println(ibuffer.get()); //also has bulk operators
Можно также использовать BigInteger для преобразования:
BigInteger.valueOf(integer).toByteArray();
создайте 4 массива байтов и скопируйте интервал в массив на 4 шагах с поразрядным ANDs, и bitshifting, как Paulo сказал.
Но помните, что алгоритмы блока, такие как AES и DES работают с 8-или 16-байтовыми блоками, таким образом, необходимо будет заполнить массив к тому, в чем нужен алгоритм. Возможно, оставьте первые 4 байта 8 массивов байтов как 0, и другие 4 байта содержат целое число.
Я нашел следующий код, который может помочь Вам, так как Целое число в Java всегда 4 байта длиной.
public static byte[] intToFourBytes(int i, boolean bigEndian) {
if (bigEndian) {
byte[] data = new byte[4];
data[3] = (byte) (i & 0xFF);
data[2] = (byte) ((i >> 8) & 0xFF);
data[1] = (byte) ((i >> 16) & 0xFF);
data[0] = (byte) ((i >> 24) & 0xFF);
return data;
} else {
byte[] data = new byte[4];
data[0] = (byte) (i & 0xFF);
data[1] = (byte) ((i >> 8) & 0xFF);
data[2] = (byte) ((i >> 16) & 0xFF);
data[3] = (byte) ((i >> 24) & 0xFF);
return data;
}
}
Можно найти больше информации о параметре с обратным порядком байтов здесь: http://en.wikipedia.org/wiki/Endianness