1

以下は、Web から画像をダウンロードした後にファイルに書き込むコードです。しかし、どういうわけか、ファイル ストリームへの書き込み中にスタックします。例外はありません。ループ中はオンのままで、強制終了ポップアップが表示されます。10 分の 2 または 3 で発生します。

private void saveImage(String fullPath) {
  File imgFile = new File(fullPath);
  try {
    if(imgFile.exists()) imgFile.delete();

    URL url = new URL(this.fileURL);
    URLConnection connection = url.openConnection();
    HttpURLConnection httpConnection = (HttpURLConnection)connection;
    InputStream in = httpConnection.getInputStream();

    FileOutputStream fos = new FileOutputStream(imgFile);
    int n = 0;
    while((n = in.read()) != -1) {
        fos.write(n);
    }
    fos.flush();
    fos.close();
    in.close();

  }
  catch(IOException e) {
    imgFile.delete();
    Log.d("IOException Thrown", e.toString());
  }
}

書き込まれたファイルを確認すると、4576 バイトまで書き込むと常にスタックします。(元の画像サイズは 150k 以上です) この問題について私を助けてくれる人はいますか?

4

2 に答える 2

2

こんにちは Juniano が 2 番目の質問に答えています。はい、while ループを使用できますが、さらに 2 つのことが必要です。

  URL url = new URL(this.fileURL);
  URLConnection connection = url.openConnection();
  HttpURLConnection httpConnection = (HttpURLConnection)connection;

  InputStream in = httpConnection.getInputStream();

   BufferedInputStream myBis = new BufferedInputStream(in);

1) InputStream を格納する ByteArrayBuffer を作成します

     ByteArrayBuffer myBABuffer = new ByteArrayBuffer(50);
                              int current = 0;
                              while ((current = myBis.read()) != -1) {
                                      myBABuffer.append((byte) current);
                              }    

    FileOutputStream fos = new FileOutputStream(imgFile);

2) 格納されたバイトでイメージを作成します。

fos.write(myBABuffer.toByteArray());    
fos.flush();
fos.close();
in.close();

ホルヘシス

于 2010-08-13T22:21:21.100 に答える
1
private void saveImage(String fullPath) {
  File imgFile = new File(fullPath);
  try {
    if(imgFile.exists()) imgFile.delete();

/**    URL url = new URL(this.fileURL);
    URLConnection connection = url.openConnection();
    HttpURLConnection httpConnection = (HttpURLConnection)connection;
    InputStream in = httpConnection.getInputStream();

    FileOutputStream fos = new FileOutputStream(imgFile);
    int n = 0;
    while((n = in.read()) != -1) {
        fos.write(n);
    }
    fos.flush();
    fos.close();
    in.close();***/

 FileOutputStream fos = new FileOutputStream(imgFile);

URL url = new URL(this.fileUR);
Object content = url.getContent();
InputStream in =  (InputStream) content;
Bitmap bitmap = BitmapFactory.decodeStream(in);
bitmap.compress(CompressFormat.JPEG,80, fos);
fos.flush();
fos.close();
in.close();


  }
  catch(IOException e) {
    imgFile.delete();
    Log.d("IOException Thrown", e.toString());
  }
}
于 2010-08-13T19:08:23.380 に答える