0

データ全体が作成される前に、HTTP サーバーへのデータの送信を開始したいと考えています。

これは、java.net.HttpURLConnection を使用すると非常に簡単です。

urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setDoInput(true);
urlConnection.setDoOutput(true);
urlConnection.setChunkedStreamingMode(0);

dos = new DataOutputStream(urlConnection.getOutputStream());
...
dos.writeShort(s);
...

しかし、いくつかの理由で、org.apache.http パッケージを使用して実行したいと考えています (パッケージ org.apache.http に基づいてライブラリを開発する必要があります)。ドキュメントを読みましたが、上記のコードに似たものは見つかりませんでした。最終的なデータサイズを知る前に、org.apache.http パッケージをチャンクで使用して HTTP サーバーにデータを送信することは可能ですか?

すべての提案を事前にありがとう;)

4

1 に答える 1

2

最終的なサイズがわからないチャンクでデータを送信することも、Apache ライブラリを使用すると非常に簡単です。簡単な例を次に示します。

DataInputStream dis;
...
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://localhost:8080");

BasicHttpEntity entity = new BasicHttpEntity();
entity.setChunked(true);
entity.setContentLength(-1);
entity.setContent(dis);

httppost.setEntity(entity);
HttpResponse response = null;
try {
     response = httpclient.execute(httppost);
} catch (ClientProtocolException e) {
    // TODO
} catch (IOException e) {
    // TODO
}
...
// processing http response....

disエンティティ本体を含むストリームです。パイプdisされたストリームを使用して、入力ストリームを出力ストリームにパイプできます。したがって、1 つのスレッドがデータを作成し (たとえば、マイクからの音声を録音する)、もう 1 つのスレッドがそれをサーバーに送信する場合があります。

// creating piped streams
private PipedInputStream pis;
private PipedOutputStream pos;
private DataOutputStream dos;
private DataInputStream dis;

...

pos = new PipedOutputStream();
pis = new PipedInputStream(pos);
dos = new DataOutputStream(pos);
dis = new DataInputStream(pis);

// in thread creating data dynamically
try {
    // writing data to dos stream
    ...
    dos.write(b);
    ...
} catch (IOException e) {
    // TODO
}

// Before finishing thread, we have to flush and close dos stream
// then dis stream will know that all data have been written and will finish
// streaming data to server.
try {
    dos.flush();
    dos.close();
} catch (Exception e) {
    // TODO
}

dosデータを動的に作成するスレッドdis、サーバーにデータを送信するスレッドに渡す必要があります。

参照: http://www.androidadb.com/class/ba/BasicHttpEntity.html

于 2012-09-05T20:48:36.627 に答える