我有一个用于将文件上传到服务器的java applet。
我想显示发送的数据的百分比,但是当我使用ObjectOutputStream.write()
时,它只是写入缓冲区,不会等到数据实际发送完毕。我怎样才能做到这一点。
也许我需要使用线程同步或其他东西。任何线索都是最有帮助的。
答案 0 :(得分:4)
请勿使用ObjectOutputStream
。它用于编写序列化Java对象,而不是用于编写原始二进制数据。它可能确实阻止了流。而只是直接写入URL连接的OutputStream
。
那就是说,代码看起来相当复杂。即使在多次重读并无数次眨眼之后,我也无法做到正确。我建议您在Commons HttpClient的帮助下,根据multipart/form-data
编码发送这些文件。您可以找到here基本代码示例。您只需修改Part[] parts
即可包含所有文件。另一方面,servlet可以使用Commons FileUpload来解析multipart/form-data
请求。
要计算进度,我建议选择CountingOutputStream
Commons IO。只需将OutputStream
包裹起来并写入即可。
更新:如果您不想发送带有更多第三方库的applet(我认为这是合理的),那么请查看this code snippet(以及原始问题)提到第一个链接)如何使用multipart/form-data
自己创建URLConnection
身体。
答案 1 :(得分:1)
我真正想要的是:
setFixedLengthStreamingMode(int contentLength)
这可以防止任何内部缓冲,让我确切知道发送的数据量。