提交 e3b15ea0 authored 作者: Thomas Mueller's avatar Thomas Mueller

Utils.writeLong

上级 bcd5ceb8
......@@ -63,6 +63,26 @@ public class Utils {
return (buff[pos++] << 24) + ((buff[pos++] & 0xff) << 16) + ((buff[pos++] & 0xff) << 8) + (buff[pos] & 0xff);
}
/**
* Write a long value to the byte array at the given position. The most
* significant byte is written first.
*
* @param buff the byte array
* @param pos the position
* @param x the value to write
*/
public static void writeLong(byte[] buff, int pos, long x) {
writeInt(buff, pos, (int) (x >> 32));
writeInt(buff, pos + 4, (int) x);
}
private static void writeInt(byte[] buff, int pos, int x) {
buff[pos++] = (byte) (x >> 24);
buff[pos++] = (byte) (x >> 16);
buff[pos++] = (byte) (x >> 8);
buff[pos++] = (byte) x;
}
/**
* Read a long value from the byte array at the given position. The most
* significant byte is read first.
......
......@@ -8,6 +8,7 @@ package org.h2.test.unit;
import java.io.File;
import java.math.BigInteger;
import java.util.Random;
import org.h2.test.TestBase;
import org.h2.util.Utils;
......@@ -31,12 +32,30 @@ public class TestUtils extends TestBase {
}
public void test() throws Exception {
testWriteReadLong();
testGetNonPrimitiveClass();
testGetNonPrimitiveClass();
testGetNonPrimitiveClass();
testReflectionUtils();
}
private void testWriteReadLong() {
byte[] buff = new byte[8];
for (long x : new long[]{Long.MIN_VALUE, Long.MAX_VALUE, 0, 1, -1,
Integer.MIN_VALUE, Integer.MAX_VALUE}) {
Utils.writeLong(buff, 0, x);
long y = Utils.readLong(buff, 0);
assertEquals(x, y);
}
Random r = new Random(1);
for (int i = 0; i < 1000; i++) {
long x = r.nextLong();
Utils.writeLong(buff, 0, x);
long y = Utils.readLong(buff, 0);
assertEquals(x, y);
}
}
private void testGetNonPrimitiveClass() throws Exception {
testGetNonPrimitiveClass(BigInteger.class, BigInteger.class);
testGetNonPrimitiveClass(Boolean.class, boolean.class);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论