获得OuputStream使用Jersey客户端请求的身体?

我wan't发布一个CSV文件使用Jersey客户端Web服务,而无需在内存中缓冲CSV内容。

于是我开始用类似这样的代码:

String csvContent = [the buffered CSV content]; Client c = Client.create(); WebResource r = c.resouce("http://example.com/services/service"); r.type("text/csv").post(csvContent);

我想,以避免在发送给服务器之前缓存在内存中的整个CSV内容,我知道我可以使用客户端和球衣将处理负荷和发送文件发送一个文件对象,但是在这种情况下,CSV内容可以自动生成所以我真的很想做的只是简单地将其写入到一个OutputStream可乘地铁直接到达服务器,而不是到内存... ...有没有办法使用Jersey客户端,我可以做到这一点?

--------------解决方案-------------

看来新泽西州不支持但经过多次挖掘和几个不同的合并以为我沿着我设法想出这个类的方式学会了写作直接到输出流。

新泽西支持通过一个InputStream进入后方法上WebResource其读取和写入请求主体的内容。

我生产从ResultSet一个CSV文件,所以我写了一个扩展InputStream和读取时()被调用它得到了创纪录的ResultSet和建立一个行CSV文件并返回该行只有一个字符类。 每次读()称为下一个字符被返回,直到整个行被返回,此时下一个记录从数据库和重复过程读取,直到没有留下记录。

我使用了一个名为OpenCSV库来构建CSV文件的行

public class ResultSetCsvInputStream extends InputStream {

private ResultSet rs;
private int columns;

private int ch;
private byte[] line;

/**
* Construct a new SchemaInputStream
* @param rs
* @throws SQLException
*/
public ResultSetCsvInputStream(ResultSet rs) throws SQLException {

this.rs = rs;

// write column names
ResultSetMetaData meta = rs.getMetaData();
columns = meta.getColumnCount();
String[] colNames = new String[columns];
for(int i = 0; i < colNames.length; i++) {
colNames[i] = meta.getColumnName(i+1);
}
writeLine(colNames);

}

private void writeLine(String[] ln) {
StringWriter strWriter = new StringWriter();
CSVWriter csv = new CSVWriter(strWriter);
csv.writeNext(ln);
line = strWriter.toString().getBytes(Charset.forName("UTF8"));
ch = 0;
}

@Override
public int read() throws IOException {

if(rs == null)
return -1;

// read the next line
if(line == null || ch >= line.length) {

// query next line
try {
if(rs.next()) {
String[] record = new String[columns];
for(int i = 0; i < record.length; i++) {
record[i] = rs.getString(i+1);
}
writeLine(record);
}
else {
rs = null;
return -1;
}
} catch (SQLException e) {
throw new IOException(e);
}

}

// read next character
return line[ch++] & 0xFF;

}

}

分类:java的 时间:2015-03-15 人气:0
本文关键词: java的,休息,运动衫
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.652 (s). 10 q(s)