热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HttpClientAPI不保存大小超过1.9kb的图像-HttpClientAPInotsavingimagehavingsizemorethan1.9kb

Ihavebeenstuckedinastrangeproblem.Iamusingorg.apache.http.impl.client.HttpClientapifor

I have been stucked in a strange problem. I am using org.apache.http.impl.client.HttpClient api for an XML and media transfer beetween two web sites, now while reading a binary content (image in my case) from the web using DefaultHttpClient only 1.9 kb of the image is saved. The problem is strange because the code works fine on my development environment (windows and ubuntu linux), but appears only on my production environment that is SUSE linux.

我一直陷入一个奇怪的问题。我正在使用org.apache.http.impl.client.HttpClient api进行两个网站之间的XML和媒体传输,现在在使用DefaultHttpClient从网络读取二进制内容(我的情况下的图像)时,只有1.9 kb的图像是保存。问题很奇怪,因为代码在我的开发环境(windows和ubuntu linux)上工作正常,但只出现在我的生产环境SUSE linux上。

below is the code i have used to save the file.

下面是我用来保存文件的代码。

HttpResponse respOnse= defaultHttpClient.execute(request);
InputStream stream = response.getEntity().getContent();
byte[] buffer = new byte[10024];
int count = stream.read(buffer);
buffer = Arrays.copyOf(buffer, count);
FileOutputStream fstream = new FileOutputStream("myFile.jpeg",true);
fstream.write(buffer, 0, count);
fstream.flush();
fstream.close();
stream.close();

Any help will be appreciated.

任何帮助将不胜感激。

Thanks
Shailesh.

3 个解决方案

#1


0  

You should be checking for the content length of your response before creating your byte buffer.

在创建字节缓冲区之前,您应该检查响应的内容长度。

Secondly, you should be checking to see how many bytes were read in the variable count.

其次,您应该检查变量计数中读取了多少字节。

#2


0  

Your problem is you just reading your buffer.length data (which is 10024) bytes and you're not reading the rest.

你的问题是你只是读取你的buffer.length数据(这是10024)字节而你没有阅读其余的。

Do something of this effect:

做一些这样的事情:

HttpResponse respOnse= defaultHttpClient.execute(request);
InputStream stream = response.getEntity().getContent();
FileOutputStream fstream = new FileOutputStream("myFile.jpeg",true);
byte[] buffer = new byte[10024];
int count = -1;
while ((count = stream.read(buffer)) != -1) {
    fstream.write(buffer);
}
fstream.flush();
fstream.close();
stream.close();

Plus, I would close all my Closeable objects in a finally try-finally block (for guarantee).

另外,我会在最终的try-finally块中关闭所有的Closeable对象(为了保证)。

#3


0  


public int read(byte[] b)
         throws IOException

Reads some number of bytes from the input stream and stores them into the buffer array b.

从输入流中读取一些字节数并将它们存储到缓冲区数组b中。


Your understanding of the #read method's contract is wrong. There is no guarantee that the read method will retrieve the entire response content in one invocation, even if it is really small. One must keep on reading from the input stream until the end of stream (read operation returns -1)

您对#read方法的合同的理解是错误的。无法保证read方法将在一次调用中检索整个响应内容,即使它非常小。必须继续从输入流读取,直到流结束(读取操作返回-1)


推荐阅读
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
author-avatar
mobiledu2502872123
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有