像java

时间:2017-03-10 17:36:50

标签: java stream queue bounded-types

目标

  1. 我正在寻找一个有限的字节流,就像java中的实现一样,具有“写”和“读”功能。
  2. 写入应该是非阻塞的,如果已达到容量,则应该删除。
  3. 理想情况下,应在开头给出流的最大大小,以便不存在动态内存分配开销。
  4. 我尝试了什么

    我使用以下缓冲类共享数据结构,在生产者和消费者之间共享:

    public class Buffer<T> {
    
        private ArrayBlockingQueue<T> buffer;
    
        public Buffer(int maxSize) {
            buffer = new ArrayBlockingQueue<T>(maxSize);
        }
    
        public boolean offer(T o) {
            return buffer.offer(o);
        }
    
        public T take(){
            try {
                return buffer.take();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return null;
        }
    
        public static void main(String[] args){
            Buffer<String> buffer = new Buffer<String>(10);
            buffer.offer("hello");
            System.out.println(buffer.take());
        }
    
    }
    

    线程1中的生产者,它从套接字读取并按如下方式发送数据:

    private InputStream in;
    
    while ( (bytesRead = in.read(request)) != -1) {
       this.register.buffer.offer(new ByteObject(request,bytesRead)
     }
    

    线程2中的消费者,它从缓冲区读取并写入套接字:

    private OutputStream out;
    
    while(true){
       ByteObject poll = register.buffer.take();
       bytesRead = poll.len;
    
       if(bytesRead>0){
           out.write(poll.arr,0,bytesRead);
           out.flush();
        }else
           break;
    }
    

    当前实施的问题:

    由于它不是流实现,我无法在消费者中检测到EOF。任何人都可以为java中的Bounded Stream操作提供一个示例,它提供非阻塞写入选项(如offer()功能)

    或者,我如何在当前代码中获得EOF?

0 个答案:

没有答案