Помогите мне что-то понять.Работа с 16-битными символами с помощью sun.misc.Unsafe
Использование .. import sun.misc.Unsafe;
Если мне нужно поставить символ 0-127
в какой-то адрес памяти, для того, чтобы предотвратить из символов диапазона, я это сделать
if (0 != (c & 0xFF80)) {
throw new RuntimeException("Only Ascii characters are supported. 0-127.");
} else {
// Since Java's chars are 16 bits long, i cast it
// to byte (8 bits) and then `putByte()`
UNSAFE.putByte(address, (byte) c);
}
Когда мой тест проверяет, что в что память
char c1 = Ascii.a;
asciiEncoder.encode(address, c1);
assertThat(unsafe.getChar(address), is(c1));
Этот тест, кажется, проходит и проваливается на некоторых машинах. Позвольте мне повторить, что это работает на некоторых MAC, а не на других, а на некоторых Windows, а не на других.
Что не удается? Возвращается символ, отличный от 'a'.
Как я понимаю, это возможно, если при распределении память не очищается, но разве это не позаботится об этом?
@Before
public void setUp() {
address = unsafe.allocateMemory(64); // Isn't this mem clean?
}
Если я изменить это на 8 бит, тест проходит всегда
@Before
public void setUp() {
address = unsafe.allocateMemory(8);
}
Пожалуйста, помогите мне понять
Он платит RTFM. Спасибо, hoaz! Большое спасибо! – JAM