首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过网络发布数据在java.io API中不起作用。

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

Stack Overflow用户
提问于 2014-01-27 04:49:07
回答 1查看 86关注 0票数 0

我有下面这段代码,当从eclipse运行时,它工作得很好。

代码语言:javascript
复制
 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在服务器上读回它时,我没有得到我发布的值。客户端代码如下所示

代码语言:javascript
复制
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();
}

服务器上的代码如下所示

代码语言:javascript
复制
@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应用程序接口不能工作吗?

EN

回答 1

Stack Overflow用户

发布于 2014-01-27 05:07:20

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21368991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档