下面列出了io.netty.util.internal.PlatformDependent#setMemory ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private static void uncheckedZeros(final ByteBuffer buffer, int offset, int bytes) {
if (buffer.isReadOnly()) {
throw new ReadOnlyBufferException();
}
final byte zero = (byte) 0;
if (buffer.isDirect() && PlatformDependent.hasUnsafe()) {
PlatformDependent.setMemory(PlatformDependent.directBufferAddress(buffer) + offset, bytes, zero);
} else if (buffer.hasArray()) {
//SIMD OPTIMIZATION
final int arrayOffset = buffer.arrayOffset();
final int start = arrayOffset + offset;
Arrays.fill(buffer.array(), start, start + bytes, zero);
} else {
//slow path
for (int i = 0; i < bytes; i++) {
buffer.put(i + offset, zero);
}
}
}
static void setZero(long addr, int length) {
if (length == 0) {
return;
}
PlatformDependent.setMemory(addr, length, ZERO);
}
@Override
public void clearBuffer(final ByteBuffer buffer) {
if (buffer.isDirect()) {
PlatformDependent.setMemory(PlatformDependent.directBufferAddress(buffer), buffer.limit(), (byte) 0);
} else {
Arrays.fill(buffer.array(), buffer.arrayOffset(), buffer.limit(), (byte) 0);
}
}
static void setZero(byte[] array, int index, int length) {
if (length == 0) {
return;
}
PlatformDependent.setMemory(array, index, length, ZERO);
}