gpt4 book ai didi

java - 扩展的 MultipartEntity 没有正确写出 Streams

转载 作者:行者123 更新时间:2023-11-30 11:53:17 25 4
gpt4 key购买 nike

我想在我的 AndroidHttpClient 中实现一个 ProgressDialog。我在这里找到了一个简单的实现 CountingMultipartEntity .
另外我添加了内容长度支持。我覆盖了 addPart 方法。
FileBody 上传几乎可以正常工作。当上传包含​​一个文件时,它工作完美,但当有两个文件时,第二个文件仅上传部分。
InputStreamBody 有效,但仅当我不计算 InputStream 的长度时才有效。所以我必须重置它,但是如何?

这里是我的重写 addPart:

@Override
public void addPart(String name, ContentBody cb) {
if (cb instanceof FileBody) {
this.contentLength += ((FileBody) cb).getFile().length();
} else if (cb instanceof InputStreamBody) {
try {
CountingInputStream in =
new CountingInputStream(((InputStreamBody) cb).getInputStream());
ObjectInputStream ois = new ObjectInputStream(in);
ois.readObject();
this.contentLength += in.getBytesRead();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
super.addPart(name, cb);
}

CountingInputStreamInputStream 的简单扩展:

public class CountingInputStream extends InputStream {
private InputStream source;
private long bytesRead = 0;

public CountingInputStream(InputStream source) {
this.source = source;
}

public int read() throws IOException {
int value = source.read();
bytesRead++;
return value;
}

public long getBytesRead() {
return bytesRead;
}
}

计数差不多了,只有2个字节,不应该有。但这太重要了。

首先我认为必须重置流。在 in.getReadedBytes(); 之后调用的重置导致 IOException

感谢您的任何建议。

最佳答案

我发现了我的错误。我已经覆盖了方法 getContentLength(),这对传输很重要,删除我自己的版本后文件传输工作正常。

为了获得 InputStream 的大小,我使用了上面的类,但编辑了方法 getBytesRead(),因为 ObjectInputStream 导致 < em>StreamCorruptedException:

public long getBytesRead() {
try {
while (read() != -1)
;
} catch (IOException e) {
e.printStackTrace();
}

return bytesRead;
}

要获取内容长度,如果没有任何流,您可以采用给定的方法 getContentLength()
否则,您必须实现自己的内容长度计算。上面的方法addPart(String name, ContentBody cb)提供了一种方法。您可以从类(class)中获得有关内容长度计算的更多详细信息 MultiPartyEntityHttpMultipart .

关于java - 扩展的 MultipartEntity 没有正确写出 Streams,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6391714/

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