4

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アプリケーションでprogressBarを更新するために必要です)。

私のアイデアは、DataHandlerを何らかの方法で拡張し、定期的に何バイトが書き込まれるかを尋ねることでした。しかし、私はjava noobであり、それを実現する方法がわかりません。

4

2 に答える 2

0

私はいくつかの調査を行いましたが、以前に getInputStream() と呼ばれる DataHandler メソッドを見落としていました。この方法を使用すると、必要なことを実行できます。

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

// got Input Stream from DataHandler
InputStream is = dataHandler.getInputStream();

// then I can manage writing file my way        
byte data[] = new byte[BUFFER_SIZE];
int br;
Long bytesWritten = 0L;
while ((br = is.read(data)) > 0) {
    fileOutputStream.write(data, 0, br);
    bytesWritten = bytesWritten + br;
    // call some method to update UI progressBar
}

// this is now useless:
// dataHandler.writeTo(fileOutputStream);
fileOutputStream.flush();
fileOutputStream.close();
于 2013-01-10T11:58:31.177 に答える