gpt4 book ai didi

java - 如何确定DataHandler.writeTo()方法当前写入的字节数?

转载 作者:行者123 更新时间:2023-12-03 01:02:13 25 4
gpt4 key购买 nike

我必须使用 MTOM 从 Web 服务下载文件。我不知道下面的实现细节。我这样做,这是可行的(响应是从Web服务返回的对象,数据是javax.activation.DataHandler类型,filePath是文件,我想在其中保存下载的文件内容):

DataHandler dataHandler = response.getData();
File file = new File(filePath);
FileOutputStream fileOutputStream = new FileOutputStream(file);
dataHandler.writeTo(fileOutputStream);
fileOutputStream.flush();
fileOutputStream.close();

但是,我需要弄清楚下载期间写入了多少字节。它可能需要很长时间,这种方式只是等待完成下载,然后关闭输出流并继续。

我知道,我可能需要另一个线程来读取写入的字节数并用它做一些事情(需要它来更新 SWT 应用程序中的进度条)。

我的想法是以某种方式扩展 DataHandler,然后定期询问写入了多少字节)。但我是java菜鸟,不知道如何实现。

最佳答案

如果将所有内容读取到 byte[],则需要足够的内存来容纳整个文件。现在这对您来说可能不是问题,但最好不要养成这种坏习惯(这很容易导致服务器瘫痪)。

Apache CommonsGoogle Guava有一个 CountingOutputStream 类可以完全满足您的要求,只需计算写入的字节数即可。如果你不能使用这个库,你可以编写一个类似的类,只需实现OutputStream,在构造函数中接收另一个OutputStream,每个方法只需增加byteCount 和代表。

关于java - 如何确定DataHandler.writeTo()方法当前写入的字节数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14241110/

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