gpt4 book ai didi

java - 通过网络发布数据在 java.io API 中不起作用

转载 作者:行者123 更新时间:2023-12-01 13:34:50 26 4
gpt4 key购买 nike

下面的代码在从 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 API 工作吗?

最佳答案

您犯了一个常见的错误,即假设 read() 填充了缓冲区。它没有义务这样做。请参阅 Javadoc。它只需读取至少一个字节并返回。字节数,返回-1,或者抛出IOException。

您还滥用了 available()。它不会返回流中的总字节数,并且 Javadoc 中专门警告了您使用它的方式。

关于java - 通过网络发布数据在 java.io API 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21368991/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com