< prev index next >
src/java.base/share/classes/sun/nio/ch/Util.java
Print this page
@@ -232,10 +232,36 @@
return ByteBuffer.allocateDirect(size);
}
}
/**
+ * Returns a temporary buffer of at least the given size and
+ * aligned to the alignment
+ */
+ public static ByteBuffer getTemporaryAlignedDirectBuffer(int size, int alignment) {
+ if (isBufferTooLarge(size)) {
+ return ByteBuffer.allocateDirect(size + alignment - 1).alignedSlice(alignment);
+ }
+
+ BufferCache cache = bufferCache.get();
+ ByteBuffer buf = cache.get(size);
+ if (buf != null) {
+ if (buf instanceof DirectBuffer) {
+ if (buf.alignmentOffset(0, alignment) == 0) {
+ return buf;
+ }
+ }
+ } else {
+ if (!cache.isEmpty()) {
+ buf = cache.removeFirst();
+ free(buf);
+ }
+ }
+ return ByteBuffer.allocateDirect(size + alignment - 1).alignedSlice(alignment);
+ }
+
+ /**
* Releases a temporary buffer by returning to the cache or freeing it.
*/
public static void releaseTemporaryDirectBuffer(ByteBuffer buf) {
offerFirstTemporaryDirectBuffer(buf);
}
< prev index next >