java - HTTP:如何正确从 BufferedHttpEntity 读取数据

标签 java http stream entity

我正在用 java 开发一个基于 HTTP 的客户端-服务器应用程序。我有一个客户端程序和一个服务器程序。基本上,客户端通过Http发送文件,但是我在服务器端读取数据时遇到问题。如果我发送大于 8KB 的文件,我只能在服务器端获取前 8KB 字符。我在 stackoverflow 上搜索了类似的问题,结果发现实体是缓冲的,所以我必须使用 BufferedHttpEntity。这是我的代码:

BufferedHttpEntity buffEntity = new BufferedHttpEntity(entity);
ByteArrayOutputStream baos = new ByteArrayOutputStream();

buffEntity.writeTo(baos);
while (buffEntity.isStreaming()) {
    buffEntity.writeTo(baos);
}

Log.i("Data received", baos.toString());

问题是我正在发送一个 16KB 的文件,控制台中显示的最后一个字母位于文档的一半处。我真的不知道如何读取缓冲实体的其余部分。但是,如果我将实体的内容写入文件(如下所示),它就可以正常工作,所以很奇怪:

File f = new File("mnt/sdcard/file.txt");
FileOutputStream os = new FileOutputStream(f);

buffEntity.writeTo(os);
while (buffEntity.isStreaming()) {
    buffEntity.writeTo(os);
}

完成此步骤后,如果我查看“mnt/sdcard/file.txt”,则文件已完整(没有丢失字符)。我不知道 ByteArrayOutputStream 做错了什么,因为它没有获取所有内容。任何帮助将不胜感激!

最佳答案

尝试使用如下所示的 InputStream 读取 BufferedHttpEntity:

   HttpEntity entity = httpResponse.getEntity();

BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(entity);

InputStraem is = bufHttpEntity .getContent() ; 

ByteArrayOutputStream bOutput = new ByteArrayOutputStream(is.available() );


int nRead;
byte[] data = new byte[is.available()];

while ((nRead = is.read(data, 0, data.length)) != -1) {
  buffer.write(data, 0, nRead);
}

buffer.flush();

请给我一些反馈。

希望有帮助。

关于java - HTTP:如何正确从 BufferedHttpEntity 读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21983156/

相关文章:

java - Java 中的通用字段多态性

c# - 使用 HttpWebResponse 读取 "chunked"响应

iphone - Objective-C,iPhone如何依次播放来自不同URL的音频文件?

multithreading - Scala 流生产和处理的多线程

c++ - 在文件流c++中打开一个简单的函数

.net - 如何将内存流转换为文本?

java - 何时收集垃圾

java - jvm退出前如何存储一个值?

java - Hibernate:如何建模双重父/子关系

http - 在 "must-revalidate"中使用 "Cache-Control: no-cache, must-revalidate"是多么必要