0

以下のこのリンクによると:

http://java.sun.com/developer/technicalArticles/Programming/PerfTuning/

自分でバッファリングを行う場合(つまり、BufferedInputStreamを使用する代わりに、自分でバッファリングを処理する場合)、ビットマップ(または任意のファイル)のロードを高速化できます。

特に、アプローチ4は有望に見えます(一度にファイル全体を丸呑みにします)。しかし、Androidでそれを実装する方法がわかりません。Javaコードは次のとおりです。

import java.io.*;

public class readfile {
 public static void main(String args[]) {
  if (args.length != 1) {
    System.err.println("missing filename");
    System.exit(1);
  }
  try {
    int len = (int)(new File(args[0]).length());
    FileInputStream fis =
        new FileInputStream(args[0]);
    byte buf[] = new byte[len];
    fis.read(buf);
    fis.close();
    int cnt = 0;
    for (int i = 0; i < len; i++) {
      if (buf[i] == '\n')
        cnt++;
    }
    System.out.println(cnt);
  }
  catch (IOException e) {
    System.err.println(e);
  }
 }

}

4

1 に答える 1

0

この手法は Android 用に最適化されていないため、うまく動作しない可能性があります。規則は、AndroidHttpClientを使用することです。

合理的なデフォルト設定と Android 用の登録済みスキームで構成され、ユーザーが HttpRequestInterceptor クラスを追加できるようにする Apache DefaultHttpClient のサブクラス。

上記の Sun のコードを実際に使用する場合は、ファイルのサイズがアプリケーションで使用できるヒープ スペースの量を超えると VM ヒープ バジェットを超える可能性があるため、注意が必要です。

ActivityManagerを使用して十分なヒープ領域が残っているかどうかを最初に確認することをお勧めします。この質問に対する詳細な回答も参照してください。

編集:

POST 経由で InputStream を送信する例を見つけました。ここでは、ファイルがリソース ( ) から読み取られていますが、をスニペットのres/data.xmlに置き換えることができます。をバイト配列に変換することは、基本的にコードと同じです: ファイル全体をメモリに読み込み、それをリクエストにプッシュします。これは悪名高いs の原因であるため、大きすぎるファイル (1 MB 未満をお勧めします) を読み取らないように注意してください。InputStreamFileInputStreamInputStreamOutOfMemoryError

public void executeMultipartPost() throws Exception {
    try {
        InputStream is = this.getAssets().open("data.xml");
        HttpClient httpClient = new DefaultHttpClient();
        HttpPost postRequest = new HttpPost("http://w3mentor.com/Upload.aspx");
        byte[] data = IOUtils.toByteArray(is);
        InputStreamBody isb = new InputStreamBody(new ByteArrayInputStream(data),"uploadedFile");
        StringBody sb1 = new StringBody("someTextGoesHere");
        StringBody sb2 = new StringBody("someTextGoesHere too");
        MultipartEntity multipartContent = new MultipartEntity();
        multipartContent.addPart("uploadedFile", isb);
        multipartContent.addPart("one", sb1);
        multipartContent.addPart("two", sb2);
        postRequest.setEntity(multipartContent);
        HttpResponse res = httpClient.execute(postRequest);
        res.getEntity().getContent().close();
    } catch (Throwable e) {
        // handle exception here
    }
}
于 2011-06-04T12:27:13.327 に答える