【问题标题】:DataOutputStream write causing outofmemory errorDataOutputStream 写入导致内存不足错误
【发布时间】:2015-02-14 03:23:52
【问题描述】:

我正在使用链接在块中使用 HttpsURLConnection 发布大文件的 https 帖子 -

file upload using httppost android

我收到致命异常 -

06-09 11:44:47.041 E/AndroidRuntime( 6250): FATAL EXCEPTION: Thread-712

06-09 11:44:47.041 E/AndroidRuntime( 6250): java.lang.OutOfMemoryError

06-09 11:44:47.041 E/AndroidRuntime( 6250):     at java.io.ByteArrayOutputStream.expand(ByteArrayOutputStream.java:91)

06-09 11:44:47.041 E/AndroidRuntime( 6250):     at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:201)

06-09 11:44:47.041 E/AndroidRuntime( 6250):     at libcore.net.http.RetryableOutputStream.write(RetryableOutputStream.java:61)

06-09 11:44:47.041 E/AndroidRuntime( 6250):     at java.io.DataOutputStream.write(DataOutputStream.java:98)

HPROF 分析 -

泄密嫌疑人

“”加载的一个“libcore.net.http.RetryableOutputStream”实例占用134,216,008(82.46%)字节。内存是在“”加载的“byte[]”的一个实例中累积的。

详情

buf java.io.ByteArrayOutputStream @ 0x444fd460 16 134,215,984

content libcore.net.http.RetryableOutputStream @ 0x444fd448 24 134,216,008

out java.io.DataOutputStream @ 0x4467f918 24 48

谁能帮我解决这个问题。

我也加了DataOutputStream.flush,但没用

    // read file and write to buffer
    bytesRead = fileInputStream.read(buffer, 0, bufferSize);

    int pktSend = 0;
    // continue till bytes read not null
    while (bytesRead > 0) {
        dos.write(buffer, 0, bufferSize);
        bytesAvailable = fileInputStream.available();
        bufferSize = Math.min(bytesAvailable, maxBufferSize);
        bytesRead = fileInputStream.read(buffer, 0, bufferSize);
        pktSend++;
        dos.flush();
    }

【问题讨论】:

  • 可能不相关,但你应该有:dos.write(buffer, 0, bytesRead);
  • DataOutputStream 添加 HttpUrlConnectionObject.setChunkedStreamingMode(maxBufferSize) 后卡在 write() 方法;在代码中。有人可以帮忙吗??

标签: android out-of-memory dataoutputstream httpsurlconnection


【解决方案1】:

也许你可以在你的代码上尝试以下设置:

        // set the request mode as POST
        urlConnection.setRequestMethod("POST");

        // disable using cache.
        urlConnection.setUseCaches(false);

        // enable Output/Input.
        urlConnection.setDoOutput(true);
        urlConnection.setDoInput(true);

【讨论】:

    猜你喜欢
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    相关资源
    最近更新 更多