StreamingOutput与Jersey无法正常工作。表现为块

时间:2013-12-23 13:27:18

标签: jersey

我需要在可用时传输记录。因此我有

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;

import javax.ws.rs.core.StreamingOutput;

import org.apache.log4j.Logger;

public class StreamingOutputImpl extends RetrieverResource implements StreamingOutput {
    private static final Logger LOGGER = Logger.getLogger(StreamingOutputImpl.class);
    private OutputStream os;

    public StreamingOutputImpl(final RequestParameters parameters, final String basePath) {
        super(parameters, basePath);
    }

    @Override
    public void write(final OutputStream os) throws IOException {
        this.os = os;
        read();
    }

    @Override
    public void writeRecord(final GenericRecord record) {
        try {
            Writer writer = new BufferedWriter(new OutputStreamWriter(os));
            writer.write(record.toString());
            writer.flush();
        } catch (final IOException e) {
            LOGGER.error("Error while write record " + record, e);
        }
    }
}

假设我有100条记录,并且writeRecord()被调用100次。我只在第100条记录之后才看到浏览器中的输出(@GET和@POST),而不是在每条记录之后。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

检查浏览器和之间正在交换的数据。使用firebug的服务器。

这可能是浏览器特定的行为,只有在服务器关闭输出流以将其呈现给GUI时才呈现数据。

答案 1 :(得分:0)

代码是正确的。它只有浏览器(FF和Chrome)一次呈现所有数据。卷曲时,我看到以流媒体方式呈现的数据。