我正在用 Java 编写一个简单的代理。我无法将给定请求的全部内容读入字节数组。具体来说,在下面的循环中,即使客户端已经发送了它将发送的所有数据(也就是说,永远不会到达流的末尾),对“读取”的调用也会阻塞。因为在我读完整个输入之前我不能确定是时候开始写输出了,这会造成一些麻烦。如果我终止与服务器的连接,则最终到达流的末尾,并且一切都顺利进行(来自客户端的所有数据,在这种情况下,Firefox 请求 www.google.com,已被服务器读取,并且它能够根据需要对其进行处理,但显然它无法将任何内容发送回客户端)。
public static void copyStream(InputStream is, OutputStream os) throws IOException
{
int read = 0;
byte[] buffer = new byte[BUFFER_SIZE];
while((read = is.read(buffer, 0, BUFFER_SIZE)) != -1)
{
os.write(buffer, 0, read);
}
return;
}
InputStream 直接来自客户端套接字(getInputStream(),然后缓冲);OutputStream 是一个 ByteArrayOutputStream。
我究竟做错了什么?