我正在用 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/