目标:
我尝试了什么:
我使用以下缓冲类共享数据结构,在生产者和消费者之间共享:
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?