zoukankan      html  css  js  c++  java
  • java BufferSegment

    package org.rx.util;
    
    import java.util.function.Consumer;
    
    import static org.rx.core.Contract.require;
    
    public class BufferSegment {
        private final byte[] buffer;
        private final int bufferSize;
        private volatile int offset;
        private volatile boolean autoReleased;
    
        public boolean isAutoReleased() {
            return autoReleased;
        }
    
        public void setAutoReleased(boolean autoReleased) {
            this.autoReleased = autoReleased;
        }
    
        public BufferSegment(int bufferSize, int bufferCount) {
            require(bufferSize, bufferSize >= 0);
            require(bufferCount, bufferCount >= 0);
    
            buffer = new byte[(this.bufferSize = bufferSize) * bufferCount];
        }
    
        public BytesSegment alloc() {
            if (offset == buffer.length) {
                return new BytesSegment(new byte[bufferSize]);
            }
    
            synchronized (buffer) {
                BytesSegment segment = new BytesSegment(buffer, offset, bufferSize);
                offset += bufferSize;
                if (autoReleased) {
                    segment.Closed = p -> release(p);
                }
                return segment;
            }
        }
    
        public void release(BytesSegment segment) {
            require(segment);
    
            if (buffer != segment.array) {
                return;
            }
    
            synchronized (buffer) {
                offset -= segment.count;
            }
        }
    
        public void accept(Consumer<BytesSegment> consumer) {
            require(consumer);
    
            try (BytesSegment segment = alloc()) {
                consumer.accept(segment);
            }
        }
    }
  • 相关阅读:
    ZOJ2334 Monkey King 并查集 STL
    ZOJ2286 Sum of Divisors 筛选式打表
    ZOJ2105 终于找到错误
    ZOJ-2091-Mean of Subsequence (反证法的运用!!)
    【9929】潜水员
    【9928】混合背包
    【t077】宝物筛选
    【9927】庆功会
    【9926】完全背包
    【9925】0/1背包
  • 原文地址:https://www.cnblogs.com/Googler/p/11725024.html
Copyright © 2011-2022 走看看