我有下面这段代码,当从eclipse运行时,它工作得很好。
String str = "testing";
InputStream is = new ByteArrayInputStream(str.getBytes());
int length = is.available();
byte[] data = new byte[length];
is.read(data, 0, length);
System.out.println("output "+new String(data)); 当我使用Jerser客户端API在网络上发布数据并尝试使用Jersey在服务器上读回它时,我没有得到我发布的值。客户端代码如下所示
public static void main(String s[]) throws IOException {
ClientConfig config = new DefaultClientConfig();
Client client = Client.create(config);
String str = "testingthi";
InputStream is = new ByteArrayInputStream(str.getBytes());
WebResource webResource = client.resource("http://192.168.1.15:8090/JersySample/resources/stream/upload");
ClientResponse response = webResource.type(MediaType.APPLICATION_OCTET_STREAM).post(ClientResponse.class,is);
is.close();
}服务器上的代码如下所示
@Consumes(MediaType.APPLICATION_OCTET_STREAM)
public Response upload( InputStream is) {
try{
int size = is.available();
byte data[] = new byte[size];
is.read(data,0,size);
System.out.println(" Posted data is "+ new String(data)+" length is "+size+" stream size "+is.available());
is.close();
}catch (Exception e) {
e.printStackTrace();
}
return Response.ok().entity("Done").build();
}当我使用apache-commons-io API读取字符串时,我确实得到了我发布的字符串值。有人能解释一下为什么在非网络环境下使用java.io应用程序接口不能工作吗?
发布于 2014-01-27 05:07:20
您犯了一个常见的错误,即假设read()填充缓冲区。它没有义务这样做。请参阅Javadoc。它只需要读取至少一个字节并返回。字节计数、返回-1或抛出IOException。
您还滥用了available()。它不返回流中的总字节数,并且在Javadoc中特别警告您使用它的方式。
https://stackoverflow.com/questions/21368991
复制相似问题